這是一個非常天真的問題,但我覺得我不明白django和python中異步/後臺任務的基本知識。我可以在沒有啓動並行進程的情況下在Django中運行後臺進程嗎?
我嘗試複製django-background-tasks(https://github.com/collinmutembei/django-background-tasks-example)提供的一個簡單示例,以便讓django比實際運行晚60秒執行後臺任務。但我想這同樣適用於任何其他後臺任務管理器,如Celery或Huey
該示例非常簡單 - 只要用戶訪問url,就會執行打印消息的簡單函數,而不會阻止主Django的過程中,60秒後
from background_task import background
from logging import getLogger
logger = getLogger(__name__)
@background(schedule=60)
def demo_task(message):
logger.debug('demo_task. message={0}'.format(message))
的問題是,我真的不明白的基礎知識。它不運行,除非我開始一個單獨的(或分離的)過程python manage.py process_tasks
。我是否應該始終這樣做以使後臺任務有效,或者有辦法在不啓動並行進程的情況下執行該任務?
如果我應該開始一個並行進程,我可以從django代碼中執行它。喜歡的東西:
import subprocess
process = subprocess.Popen(['python', 'manage.py','process_tasks'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
謝謝!我的問題是,如果有必要有一個單獨的過程(如'celery-celeryProj工人-l信息'在芹菜的情況下),或者我可以從django項目內運行它? –
你必須從django項目運行它 – AR7