这是一个非常幼稚的问题,但我觉得我不理解django和python中异步/后台任务的一些基本概念。我尝试复制django-background-tasks提供的简单示例(https://github.com/collinmutembei/django-background-tasks-example),以便使django在比实际运行晚60秒的后台执行任务。但我想对于任何其他后台任务管理器,如Celery或Huey,同样有效。该示例相当简单-当用户访问url时,立即执行一个简单的打印消息的函数,而不会阻止主要的django进程,60秒后再执行。
问题在于我真的不理解基础知识。除非我启动一个单独的(或分离的)进程
如果我应该启动并行进程,我能否从django代码内部执行它。类似于:
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)