[英]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.