簡體   English   中英

當服務器正常工作時,如何在 Django 中運行循環?

[英]How do I run a loop in Django while server is working as usual?

我正在嘗試創建一個 csgo 交易網站,用戶可以在其中提取和存入皮膚。 為此,我創建了一個向客戶發送交易報價的機器人賬戶。 現在我需要以某種方式確認交易已被用戶接受。 我是新手,所以可能有一個更好、更簡單的解決方案,我只是想不通。 我正在使用蒸汽庫。

我認為解決方案是運行一個函數循環來檢查報價及其狀態。 並且在狀態更改時會更新數據庫。 但我不知道如何在 Django 中創建這樣的函數,這樣服務器也會同時運行。 我也想在生產中使用這個項目,所以從我的電腦運行腳本不是解決方案。

有人可以幫我解決這個問題或引導我朝着正確的方向前進嗎?

您的問題的解決方案是使用 BackgroundScheduler 和/或 Cron 作業。 這些在后台工作,不會影響您的 django 服務器,因此您可以像往常一樣服務器文件和數據。

我個人在我的 django 應用程序中使用 APScheduler 來調度后台任務,這是一個很棒的模塊,但需要一些文檔。 它具有不同類型的任務調度程序,因此您可以嘗試它們。

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...")

從 django 啟動調用 alerts_check 函數

在應用程序.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM