[英]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.