使用celery和Django处理异步任务-part2

定期任务
我们经常需要在django项目中定期运行任务,在此芹菜可以通过芹菜节拍满足我们的需求,芹菜节拍不过是一个调度程序,该调度程序定期执行目标,并且可以隐式和显式定义。

请确保一次运行一个计划程序,否则一次将导致重复的任务

根据您所在的时区,在settings.py中设置时区,我们已经在本教程的前面进行了设置。

timezone = ‘Europe/London’

现在,我们可以通过两种方式创建定期任务,或者通过在celery.py中手动添加调度程序的代码,或者通过安装django-celery-beat软件包来使我们可以在Django Admin中创建调度程序。

1.手动编写计划程序
在celery.py文件中添加以下计划配置

打开NEW终端并运行以下命令

确保您在单独的终端中运行工作进程

您将在开始celery beat过程的终端中获得输出

现在,如果您查看工作进程终端,您会发现任务正在定期运行!

2.使用django-celery-beat
现在让我们用django-celery-beat做同样的事情

1.安装django-celery-beat

2.添加到已安装的应用程序中

将django_celery_beat模块添加到Django项目的settings.py中的INSTALLED_APPS中:

3. Run the django migrations

注意:与时区相关的设置更改时,数据库调度程序不会重置,因此您必须手动执行此操作:

现在转到Django Admin并创建一个“定期任务”,如下所示

选择任何名称,然后选择已创建的任务,并根据需要创建一个Crontab。 请从此处参考指南或Crontab的一些示例。

使用–scheduler在新终端中运行celery过程.

确保您在带有django服务器和celery beat进程的单独终端中运行了工作进程

在两个终端中检查输出日志,并在各个终端中检查日志

在生产上运行
现在,celery 在本地运行良好,最后我们需要照顾生产。 这里出现一个问题,因为我们需要同时运行流程(节拍和工作程序)以保持celery 正常工作,因此我们如何在生产服务器中始终一起运行这些流程终端。

因此,Supervisor在这里派上用场,可帮助分别运行两个实例。

Supervisor是一个客户端/服务器系统,允许其用户控制并使其保持在任何类似Unix的操作系统中的进程。 因此,我们可以将其用于运行celery 过程。

这是Supervisor的文档(http://supervisord.org/)