通常,我使用定義的 Promise 方法發送一個異步任務.apply_async,然后AsyncResult在同一物件的方法上使用 taskid 來獲取任務狀態,并最終獲得結果。
但是,當在同一個部署中定義了多個任務時,這需要我知道確切的任務型別。當我可以在不知道確切任務的情況下知道任務狀態和結果(如果可用)時,有什么辦法可以避免這種情況?
例如,以這個芹菜主節點代碼為例。
#!/usr/bin/env python3
# encoding:utf-8
"""Define the tasks in this file."""
from celery import Celery
redis_host: str = 'redis://localhost:6379/0'
celery = Celery(main='test', broker=redis_host,
backend=redis_host)
celery.conf.CELERY_TASK_SERIALIZER = 'pickle'
celery.conf.CELERY_RESULT_SERIALIZER = 'pickle'
celery.conf.CELERY_ACCEPT_CONTENT = {'json', 'pickle'}
# pylint: disable=unused-argument
@celery.task(bind=True)
def add(self, x: float, y: float) -> float:
"""Add two numbers."""
return x y
@celery.task(bind=True)
def multiply(self, x: float, y: float) -> float:
"""Multiply two numbers."""
return x * y
當我在不同的模塊中呼叫這樣的東西時
task1=add.apply_async(args=[2, 3]).id
task2=multiply.apply_async(args=[2, 3]).id
我得到兩個用于任務的 uuid。但是在檢查任務狀態時,我需要知道哪個方法(加法或乘法)與該任務 ID 相關聯,因為我必須呼叫相應物件上的方法,就像這樣。
status: str = add.AsyncResult(task_id=task1).state
我的問題是如何在不知道任務是否屬于或定義的任何其他類別的情況下僅使用任務 ID 獲取狀態和add結果multiply。
uj5u.com熱心網友回復:
id并且state只是AsyncResult物件的屬性。如果您查看 AsyncResult 類的檔案,您會發現該name屬性正是您所要求的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/463937.html
