用于异步周期性任务的 Django 通道
Django channels for asynchronous periodic tasks
我发现大多数关于 Django Channels 的文档都是关于 WebSockets 的。但我想以不同的方式使用它们,我相信这是可能的。
如何运行使用Django通道的异步周期任务?例如,我想每 15 秒检查一次某些网站上的温度(通过 API),当它的命中 > 20 时我需要一个通知。
也意味着这个task会存活很长时间(甚至可能3个月),Django有能力让消费者存活很长时间吗?
谢谢。
Channels 很容易用于后台任务 - 请在此处查看有关使用新版 Channels 执行此操作的说明:
https://github.com/jayhale/channels-examples-bg-task
有了后台任务,您就可以设置一个可以使用 cron 调用的任务,它可以在您想要的任何时间段将您的任务放入队列中。 cron 的缺点是它不能开箱即用地进行分分钟的调度——需要一些黑客攻击。参见:Running a cron every 30 seconds
例如:
向应用程序用户的 crontab 添加作业:
# crontab
/5 * * * * python manage.py cron_every_5_minutes
您的自定义管理命令可以为频道生成任务:
# myapp/management/commands/cron_every_5_minutes.py
from asgiref.sync import async_to_sync
from channels.layers import get_channel_layer
from django.core.management.base import BaseCommand
class Command(BaseCommand):
channel_layer = get_channel_layer()
help = 'Periodic task to be run every 5 minutes'
def handle(self, *args, **options):
async_to_sync(channel_layer.send)('background-tasks', {'type': 'task_5_min'})
关于工人的预期可靠性 - 他们可以 运行 无限期地,但你应该预料到他们偶尔会失败。管理工作人员更多的是您打算如何监督流程(或容器,或者您正在构建的架构)的问题。
我发现大多数关于 Django Channels 的文档都是关于 WebSockets 的。但我想以不同的方式使用它们,我相信这是可能的。
如何运行使用Django通道的异步周期任务?例如,我想每 15 秒检查一次某些网站上的温度(通过 API),当它的命中 > 20 时我需要一个通知。
也意味着这个task会存活很长时间(甚至可能3个月),Django有能力让消费者存活很长时间吗?
谢谢。
Channels 很容易用于后台任务 - 请在此处查看有关使用新版 Channels 执行此操作的说明:
https://github.com/jayhale/channels-examples-bg-task
有了后台任务,您就可以设置一个可以使用 cron 调用的任务,它可以在您想要的任何时间段将您的任务放入队列中。 cron 的缺点是它不能开箱即用地进行分分钟的调度——需要一些黑客攻击。参见:Running a cron every 30 seconds
例如:
向应用程序用户的 crontab 添加作业:
# crontab
/5 * * * * python manage.py cron_every_5_minutes
您的自定义管理命令可以为频道生成任务:
# myapp/management/commands/cron_every_5_minutes.py
from asgiref.sync import async_to_sync
from channels.layers import get_channel_layer
from django.core.management.base import BaseCommand
class Command(BaseCommand):
channel_layer = get_channel_layer()
help = 'Periodic task to be run every 5 minutes'
def handle(self, *args, **options):
async_to_sync(channel_layer.send)('background-tasks', {'type': 'task_5_min'})
关于工人的预期可靠性 - 他们可以 运行 无限期地,但你应该预料到他们偶尔会失败。管理工作人员更多的是您打算如何监督流程(或容器,或者您正在构建的架构)的问题。