[英]How do I run a loop in Django while server is working as usual?
我正在尝试创建一个 csgo 交易网站,用户可以在其中提取和存入皮肤。 为此,我创建了一个向客户发送交易报价的机器人账户。 现在我需要以某种方式确认交易已被用户接受。 我是新手,所以可能有一个更好、更简单的解决方案,我只是想不通。 我正在使用蒸汽库。
我认为解决方案是运行一个函数循环来检查报价及其状态。 并且在状态更改时会更新数据库。 但我不知道如何在 Django 中创建这样的函数,这样服务器也会同时运行。 我也想在生产中使用这个项目,所以从我的电脑运行脚本不是解决方案。
有人可以帮我解决这个问题或引导我朝着正确的方向前进吗?
您的问题的解决方案是使用 BackgroundScheduler 和/或 Cron 作业。 这些在后台工作,不会影响您的 django 服务器,因此您可以像往常一样服务器文件和数据。
我个人在我的 django 应用程序中使用 APScheduler 来调度后台任务,这是一个很棒的模块,但需要一些文档。 它具有不同类型的任务调度程序,因此您可以尝试它们。
根据 SimbaOG 的回答,我做了以下对我来说效果很好的步骤:
创建 alerts_check.py
from apscheduler.schedulers.background import BackgroundScheduler
# added schedule, ensure its only done once
def alerts_schedule():
scheduler = BackgroundScheduler()
if not scheduler.get_job('alert_check_job'):
scheduler.add_job(alerts_check, 'interval', seconds=30, id='alert_check_job')
scheduler.start()
def alerts_check():
# somewhere init log with logging.getLogger(__name__)
log.info("****** checking for alerts...")
在应用程序.py
from django.apps import AppConfig as DjangoAppConfig
import logging
import sys, os
log = logging.getLogger(__name__)
class AppConfig(DjangoAppConfig):
name = "app"
def ready(self):
# use an environment variable to run once only
# check for 'runserver' so migrate etc is avoided
once_key = 'CMD_RUN_ONCE'
run_once = os.environ.get(once_key)
if run_once is not None or 'runserver' not in sys.argv:
return True
os.environ[once_key] = 'True'
# import is done only here after models are loaded
from app.alerts_check import alerts_schedule
alerts_schedule()
log.info(f"Service has started...............")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.