[英]Celery executes a task after calling task.delay() for 3-5 times
我在Django項目中使用芹菜。 我試過使用rabbitmq和redis后端,但都無法正常工作。 使用的celery版本是3.1.26.post2。 我必須調用2、3有時是5次task.delay()才能看到任務正在運行。 有時通常在頻繁調用同一任務后,其“執行率”會提高並在70-80%的時間內執行該任務。 例如,它刪除5個task.delay()調用中的1個或2個,但是執行3-4個。 你有沒有遇到過這樣的事情? 可能是什么原因?
好的,根據您的描述,有一些我不知道的地方(它們會有所幫助):
celery worker -A your_package_name
) rabbitmqctl
檢查 根據您的反饋,我猜您的任務要么花費很長時間才能完成,要么以某種奇怪的方式掛起並且永遠無法完成。 它們肯定落在芹菜工作者啟動時創建的默認隊列中(稱為celery
)。
發布您嘗試插入到隊列中的示例任務的代碼,以及發布如何嘗試將其插入隊列的示例代碼也將有所幫助。
我通常會這樣定義我的任務(在我的包中定義了應該執行的任務,此代碼將由celery worker執行):
from your_package_name.celery import app
@app.task
my_task_name(my_param):
#do something here!
return True
我會像這樣將我的任務插入隊列(即從python shell或應該將任務插入隊列的其他包中):
my_task_name.apply_async(
args=(my_param,),
queue='my_queue_name',)
在your_package_name
某處,有一些代碼可用於定義代理(在我的情況下,我將其保存在celeryconfig.py
但由您決定)
BROKER_URL = 'amqp://your_user_name:very_secret_pwd@localhost:5672/your_vhost'
不要將vhost與您的主機名混淆。
如果像我一樣,您使用rabbitmq,那么在嘗試使用代理之前,您需要創建虛擬主機,用戶名和密碼(以root用戶身份在bash中運行)
sudo -u rabbitmq -n rabbitmqctl add_user your_user_name very_secret_pwd
sudo -u rabbitmq -n rabbitmqctl add_vhost your_vhost
sudo -u rabbitmq -n rabbitmqctl set_user_tags your_user_name your_example_tag
sudo -u rabbitmq -n rabbitmqctl set_permissions -p your_vhost your_user_name ".*" ".*" ".*"
我將像這樣開始我的工人:
python -m celery worker -A your_package_name -Q my_queue_name -c 1 -f /tmp/celery.log --loglevel="INFO"
然后,我將查看/tmp/celery.log
中的celery日志,並列出這樣的隊列(以bash作為root):
rabbitmqctl list_queues -p your_vhost
希望這將幫助您走上正確的道路。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.