您可以使用的另一个库是django-q
Django Q 是使用 Python 多处理的原生 Django 任务队列、调度程序和工作应用程序。 1
像django-appscheduler 一样,它可以使用 Django 附加到的数据库来运行和跟踪作业。或者,它可以使用像 Reddis 这样成熟的代理。
唯一的问题是我需要我的 python 程序让推文经常在后台运行。
这听起来像一个调度程序。 (Django-q 也有一个任务特性,它可以由事件触发,而不是按计划运行。调度器只是位于任务特性之上,并按定义的计划触发任务。)
django-q 分为三个部分:
- 安装Django-q并进行配置;
- 定义要获取推文的任务函数(或函数集);
- 定义运行任务的计划;
- 运行将处理计划和任务的 django-q 集群。
安装 django-q
pip install django-q
在 Django settings.py 中将其配置为已安装的应用程序(将其添加到安装应用程序列表中):
INSTALLED_APPS = [
...
'django_q',
...
]
然后它需要它自己的配置settings.py(这是使用数据库作为代理而不是reddis或Django外部的配置。)
# Settings for Django-Q
# https://mattsegal.dev/simple-scheduled-tasks.html
Q_CLUSTER = {
'orm': 'default', # should use django's ORM and database as a broker.
'workers': 4,
'timeout': 30,
'retry': 60,
'queue_limit': 50,
'bulk': 10,
}
然后您需要在数据库上运行迁移以创建 django-q 使用的表:
python manage.py migrate
(这将在数据库中创建一堆与计划和任务相关的表。可以通过 Django 管理面板查看和操作它们。)
定义任务函数
然后为您要运行的tasks 创建一个新文件:
# app/tasks.py
def fetch_tweets():
pass # do whatever logic you want here
定义任务计划
我们需要将schedule 添加到数据库中以运行任务。
python manage.py shell
from django_q.models import Schedule
Schedule.objects.create(
func='app.tasks.fetch_tweets', # module and func to run
minutes=5, # run every 5 minutes
repeats=-1 # keep repeating, repeat forever
)
您不必通过 shell 执行此操作。您可以在 python 代码等模块中执行此操作。但您可能只需要创建一次计划。
运行集群
完成后,您需要运行将处理计划的集群。否则,在不运行集群的情况下,将永远不会处理计划和任务。对 qcluster 的调用是阻塞调用。因此,通常您希望在与 Django 服务器进程不同的窗口或进程中运行它。
python manage.py qcluster
当它运行时,你会看到如下输出:
09:33:00 [Q] INFO Q Cluster fruit-november-wisconsin-hawaii starting.
09:33:00 [Q] INFO Process-1:1 ready for work at 11
09:33:00 [Q] INFO Process-1:2 ready for work at 12
09:33:00 [Q] INFO Process-1:3 ready for work at 13
09:33:00 [Q] INFO Process-1:4 ready for work at 14
09:33:00 [Q] INFO Process-1:5 monitoring at 15
09:33:00 [Q] INFO Process-1 guarding cluster fruit-november-wisconsin-hawaii
09:33:00 [Q] INFO Q Cluster fruit-november-wisconsin-hawaii running.
如果您想了解如何将任务与报告、电子邮件或信号等联系起来,还有一些 example documentation 非常有用。