我有一個特定的工作,似乎經常掛我的芹菜工人。我使用rabbitmq作爲經紀人。我試了幾件事情要解決這個問題,但沒有成功:芹菜隊掛
-
自動配置功能
- 工人,讓那些掛有足夠的時間來完成執行
- 設置一個全球性的超時
所以我對於導致這個問題的原因有一點點缺點,以及我如何解決這個問題。任何人都可以給我任何指針?有問題的任務是簡單地插入一條記錄到數據庫(在這種情況下是MongoDB)。
更新:我已經添加了CELERYD_FORCE_EXECV。我們會看看是否修復它。 更新2:不!
我有一個特定的工作,似乎經常掛我的芹菜工人。我使用rabbitmq作爲經紀人。我試了幾件事情要解決這個問題,但沒有成功:芹菜隊掛
所以我對於導致這個問題的原因有一點點缺點,以及我如何解決這個問題。任何人都可以給我任何指針?有問題的任務是簡單地插入一條記錄到數據庫(在這種情況下是MongoDB)。
更新:我已經添加了CELERYD_FORCE_EXECV。我們會看看是否修復它。 更新2:不!
使子進程掛起的特定作業通常是從未完成的IO的症狀,例如, Web請求或套接字讀取沒有超時。
大多數圖書館支持設置超時,但如果沒有,你可以隨時使用socket.setdefaulttimeout
:
import socket
@task
def http_get(url, timeout=1.0, retry_after=3.0, max_retries=None):
prev_timeout = socket.getdefaulttimeout()
socket.setdefaulttimeout(timeout)
try:
return requests.get(url)
except socket.timeout:
raise http_get.retry(exc=exc, countdown=retry_after, max_retries=max_retries)
finally:
socket.setdefaulttimeout(prev_timeout)
你最有可能擊中芹菜/海帶(見https://github.com/celery/celery/issues/3712),只有得到了最近固定一個無限循環的bug 。它尚未發佈。有關詳細信息,請參閱提交https://github.com/celery/kombu/pull/760。如果您的安裝無法使用回購版本,則解決方法是現在切換到Redis或設置CELERY_WORKER_PREFETCH_MULTIPLIER=0
和-P solo
。