[英]Celery task is hanging with http request
我正在測試芹菜任務,並偶然發現了問題。 如果任務中存在帶有請求的代碼(通過urllib.urlopen),則該代碼將掛起。 可能是什么原因?
我只是嘗試從Flask的最小配置開始。 我將rabbitmq和redis用於代理和后端,但是結果是相同的。
帶有任務的文件(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'))
這樣,我啟動了worker:celery -A run_celery.celery worker -l debug
之后,我運行ipython並調用task。
from run_celery import test_task
test_task.apply_async(('sfas',))
工人開始執行的任務:
...
Received task: run_celery.test_task...
sfas
Starting new HTTP connection (1)...
然后掛起。
僅當任務包含請求時,此行為才是實際的。 我做錯了什么?
我在代碼中找到了原因,非常想知道O_o。 我不知道為什么會這樣,但是在帶有任務的文件中,存在導入模型,當執行時,然后執行初始化實例MagentoAPI( https://github.com/bernieke/python-magento )。 如果我注釋掉此初始化,則芹菜任務中的請求將正確執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.