Django后台线程

时间:2018-11-10 19:35:32

标签: python django python-3.x python-multithreading

我正在制作Django应用。它需要在服务器运行时进行后台工作(与外部API交互),所以在我看来,我需要启动一个独立于所有外部请求的单独线程。最好的方法是什么?

我的第一个本能是简单地import threading并启动另一个线程,但是我应该将该代码放在Django应用中的什么位置?那是正确的方法吗?我需要制作一个与应用程序通信的外部服务脚本吗?

我的谷歌搜索功能仅使我想到django-background-tasks和celery之类的东西,尽管从我的理解来看,这些解决方案仅适用于需要很长时间的视图中的任务,以便在实际完成任务之前返回网页。这些解决方案是否支持后台线程?我并不是希望每隔x倍的时间运行一个函数,而是希望它从Django启动时就一直运行。

我希望它最好独立于应用程序内部,因此没有外部服务脚本的解决方案将是理想的。我希望该应用可以通过pip安装。

1 个答案:

答案 0 :(得分:1)

如果计划使用芹菜,则可以使用celery beat定期运行任务,而无需从视图中触发它。 django-celery-beat允许您通过django-admin管理计划。您仍然需要将节拍调度程序和芹菜工作者作为单独的进程运行。

但是,使用celery执行任务可能会使通过pip安装应用程序的用户的设置过程复杂化,因为他们还需要正确设置celery。

解决此问题的一种更简单的方法是将任务实施为django management command,然后从命令提示符处运行该任务,并可以安排将其作为常规cronjob运行。安装软件包后,仍将提醒您的用户配置cronjob。