採用celery中group方式進行批量非同步呼叫,且需要等待返回結果時(未設定超時時間),以下兩種情況會導致任務一直等待結果:
1. 如果非同步方法對異常未進行處理,直接丟擲,則會導致group的job一直等待結果,如下**:
@shared_task(bind=true)
def test_task_method(self, number, is_ignore_exception):
try:
logger.info('enter method')
# if number % 10 == 0:
# raise exception('throw exception')
time.sleep(15)
except exception:
logger.info(traceback.format_exc())
if not is_ignore_exception:
raise
2. celery出現任務task丟失情況,實際執行任務與期待任務數量不符合,則會一直等待結果。因為可能部分開發者對檢視broker和celery執行的情況命令不熟悉,這裡推薦安裝flower監控celery,文件參考flower文件。
在執行中觀察celery是否掉線,如下圖:
如果出現掉線,則檢視celery日誌或者系統日誌(/var/log/message)檢視是存在程序被kill情況,如下圖:
同步呼叫與非同步呼叫
一 什麼是同步呼叫與非同步呼叫 定義 1 同步就是整個處理過程順序執行,當各個過程都執行完畢,並返回結果。2 非同步呼叫則是只是傳送了呼叫的指令,呼叫者無需等待被呼叫的方法完全執行完畢 而是繼續執行下面的流程。例如,在某個呼叫中,需要順序呼叫 a,b,c三個過程方法 如他們都是同步呼叫,則需要將他們...
celery 非同步任務佇列
celery是基於python開發的分布式任務佇列。它可以讓任務的執行完全脫離主程式,甚至可以被分配到其他主機上執行。我們通常使用它來實現非同步任務 async task 和定時任務 crontab 它的架構組成如下圖 celery 4.x以上版本不安裝該模組,新增任務時會報錯 使用celery包含...
JQ 非同步呼叫
請求 test.php 網頁,忽略返回值。jquery 程式 get test.php 請求 test.php 網頁,傳送2個引數,忽略返回值。jquery 程式 get test.php 顯示 test.php 返回值 html 或 xml,取決於返回值 jquery 程式 get test.ph...