2012-09-16 111 views
1

我有一個特定的工作,似乎經常掛我的芹菜工人。我使用rabbitmq作爲經紀人。我試了幾件事情要解決這個問題,但沒有成功:芹菜隊掛

    自動配置功能
  • 工人,讓那些掛有足夠的時間來完成執行
  • 設置一個全球性的超時

所以我對於導致這個問題的原因有一點點缺點,以及我如何解決這個問題。任何人都可以給我任何指針?有問題的任務是簡單地插入一條記錄到數據庫(在這種情況下是MongoDB)。

更新:我已經添加了CELERYD_FORCE_EXECV。我們會看看是否修復它。 更新2:不!

回答

1

使子進程掛起的特定作業通常是從未完成的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)