gpt4 book ai didi

python - 使用 celery 从另一个周期性任务运行任务

转载 作者:行者123 更新时间:2023-12-05 04:57:19 24 4
gpt4 key购买 nike

我有周期性任务,应该触发另一个任务。最终预期行为:第一个任务应该从外部服务收集一些数据,然后遍历这些数据(列表)并调用另一个任务并传递参数(循环中的当前迭代)。我希望循环中的这些任务是异步的。

我编写了定期运行任务的代码,但我无法弄清楚该任务应如何调用另一个任务,因为当我通过 .delay() 方法执行此操作时,什么也没有发生。

这是我要运行的一些简化代码:

@celery_app.task(name="Hello World")
def hello_world():
print(f"HELLO WORLD PRINT")
add.delay(2, 2)
return 'Hello'


@celery_app.task
def add(x, y):
with open(f"./{str(datetime.datetime.now())}.txt", 'w') as file:
file.write(str(x+y))
print(f"x + y = {x + y}")
return x + y

目前 hello_world() 每 30 秒运行一次,因此我在日志中收到 HELLO WORLD PRINT,但添加任务未运行。我看不到应该由此任务创建的打印件或文件。

评论更新,这里是我如何使用队列:

celery_app.conf.task_routes = {
"project.app.hello_world": {
"queue": 'test_queue'
},
"project.app.add": {
"queue": 'test_queue'
},

最佳答案

解决这个问题的方法很少。

显而易见的是将队列名称放在 .apply_async 中,例如 add.apply_async(10, 10, queue="test_queue")

另一种解决方案是将队列放入任务注释中,即@celery_app.task(queue="test_queue")

我从未配置过 task_routes,但我相信可以像您尝试的那样在那里指定它...

关于python - 使用 celery 从另一个周期性任务运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64483270/

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