gpt4 book ai didi

python - 用于异步周期性任务的 Django channel

转载 作者:太空狗 更新时间:2023-10-29 20:27:06 25 4
gpt4 key购买 nike

我发现大多数关于 Django Channels 的文档都是关于 WebSockets 的。但我想以不同的方式使用它们,我相信这是可能的。

如何使用 Django channel 运行异步周期性任务?例如,我想每 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

您的自定义管理命令可以为 channel 生成任务:

# 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'})

关于 worker 的预期可靠性 - 它们可以无限期地运行,但你应该预料到它们偶尔会失败。管理工作人员更多的是您打算如何监督流程(或容器,或者您正在构建的架构)的问题。

关于python - 用于异步周期性任务的 Django channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com