簡體   English   中英

使用芹菜從另一個周期性任務中運行任務

[英]Run task from another periodic task with 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,但我相信可以像您嘗試的那樣在那里指定它...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM