Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以在Django中运行后台进程而不启动并行进程吗?_Python_Django_Parallel Processing_Celery - Fatal编程技术网

Python 我可以在Django中运行后台进程而不启动并行进程吗?

Python 我可以在Django中运行后台进程而不启动并行进程吗?,python,django,parallel-processing,celery,Python,Django,Parallel Processing,Celery,这是一个非常幼稚的问题,但我觉得我不了解django和python中异步/后台任务的一些基本内容 我尝试复制django background tasks()提供的一个简单示例,以使django比实际运行时晚60秒执行后台任务。但我想这同样适用于任何其他背景任务管理器,如芹菜或休伊 这个例子非常简单——只要用户访问url,一个打印消息的简单函数就会在60秒后执行,而不会阻塞django主进程 from background_task import background from logg

这是一个非常幼稚的问题,但我觉得我不了解django和python中异步/后台任务的一些基本内容

我尝试复制django background tasks()提供的一个简单示例,以使django比实际运行时晚60秒执行后台任务。但我想这同样适用于任何其他背景任务管理器,如芹菜或休伊

这个例子非常简单——只要用户访问url,一个打印消息的简单函数就会在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进程\u tasks
。我应该一直这样做以使后台任务正常工作,还是有一种不用启动并行进程就可以完成的方法

如果我应该启动一个并行进程,我可以从django代码内部启动它。比如:

    import subprocess

    process = subprocess.Popen(['python', 'manage.py','process_tasks'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

在后台运行一个单独的进程来运行任务不是必需的,但是很好而且很有帮助

当您运行服务器时,会创建一个进程-run
ps aux | grep runserver
-负责为web请求提供服务。当您说您希望在后台运行某些任务时,这意味着您需要一个单独的进程来执行这些任务。这就是像芹菜这样的异步任务工具的用武之地

正如您所说,您还可以通过执行以下操作自己生成一个单独的流程:

import subprocess

process = subprocess.Popen(['python', 'manage.py','process_tasks'], stdout=subprocess.PIPE, stderr=subprocess.PIPE

如果您只想并行运行一个或两个小任务,那么这种方法也完全可以。但是,当您有大量复杂的任务在后台运行时,您可能希望正确地管理它们。此外,如果出现问题,您需要能够调试这些任务。稍后,您将需要更多地了解所有后台任务中正在发生的事情、它们的状态等。这是芹菜将帮助您的地方。它将为你提供处理所有这些事情的方法。您只需担心您的业务逻辑,然后我尝试在代码中运行后台流程任务。工作正常,但间隔时间不工作。尝试参考许多文档。但我可以得到答案。你能看看这个链接吗