python - 使用 celery 从另一个周期性任务运行任务
问题描述
我有定期任务应该触发另一个任务。最终预期行为:第一个任务应该从外部服务收集一些数据,然后循环访问这些数据(列表)并通过传递参数调用另一个任务(循环中的当前迭代)。我希望循环中的这些任务是异步的。
我编写了在周期内运行任务的代码,但我无法弄清楚这个任务应该如何调用另一个任务,因为当我通过.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 - python 正则表达式,只返回第一个数字匹配
- flutter - 在调用 Build 方法之前 InitState() 未完成
- excel - 如何使用 Excel VBA 宏将集合键值对合并为一组键值对?
- sockets - Django 在导入通道上变得同步
- c++ - 是否有我可以在 Xlib 中设置的事件掩码以在窗口标题更改时接收事件
- ios - 从外部文件中读取 Runner.xcodeproj 的用户定义变量值的字符串
- powerbi - 减去按季度汇总的值
- sql - 我有一个子查询返回多个值的错误。我如何减少到一个?
- android - 使用共享 ViewModel 跨片段的 RxJava Observable
- ffmpeg - ffmpeg 保持帧率作为源