1
我正在測試芹菜任務,並且遇到了問題。如果在任務中存在具有請求的代碼(通過urllib.urlopen),則它掛起。什麼原因可以是?芹菜任務掛在http請求
我只是嘗試啓動與Flask的最小配置。 我使用rabbitmq和redis作爲broker和後端,但結果是一樣的。
文件(run_celery.py)與任務:
...import celery and flask app...
celery = Celery(
app.import_name,
backend=app.config['CELERY_BROKER_URL'],
broker=app.config['CELERY_BROKER_URL']
)
@celery.task
def test_task(a):
print(a)
print(requests.get('http://google.com'))
這樣,我又推出了工人: 芹菜-A run_celery.celery工人-l調試
在此之後,我運行IPython中和呼叫任務。
from run_celery import test_task
test_task.apply_async(('sfas',))
工人開始執行任務:
...
Received task: run_celery.test_task...
sfas
Starting new HTTP connection (1)...
並在此之後它的懸掛。
此行爲僅在任務包含請求時纔是實際的。 我做錯了什麼?
你在redis中的任務是什麼狀態?如果向請求添加超時會發生什麼情況? – bwarren2
@ bwarren2 沒有。如果我爲urlopen設置超時,Python必須引發異常,但沒有任何事情發生。它看起來像芹菜任務掛。 –
@ bwarren2 當任務正在執行和掛,內redis的只存在3個鍵: '127.0.0.1:6379>鍵* 1) 「_kombu.binding.celeryev」 2) 「_kombu.binding.celery.pidbox」 3)「_kombu.binding.celery」' –