Celery的apply_async()无法正常工作的解决方案之一

本文由Markdown语法编辑器编辑完成。

1. 问题提出

任务队列是一种在线程或机器间分发任务的机制。
消息队列的输入是工作的一个单元,称为任务,独立的职程(Worker)进程持续监控队列中是否有需要处理的新任务。

Celery用消息通信,通常使用中间人(Broker)在客户端和职程间斡旋。这个过程从客户端向队列添加消息开始,之后中间人把消息派送给职程。

Celery系统可包含多个职程和中间人,以此获得高可用性和横向扩展能力。

Celery需要一个发送和接收消息的传输者。RabbitMQ和Redis中间人的消息传输支持所有特性。

Celery的常见API中,有一个常用的是 apply_async()。从接口的名称中可以看出,它是用于处理异步任务的。即调用者并不太关心这个任务的执行结果,只需要把接到的任务丢出去,让一个进程去执行任务即可。

最近在使用apply_async()这个接口时,发现出现了故障,就是丢进去的任务,似乎丢失了,就是没有后续的动作了,就像将一个石头丢进了大海里,消失了。一直百思不得其解。因为同样的处理程序,用同步的写法,就没有问题;一用异步的调用,就没有结果了。很是恼火。

于是开始在网上找一些帖子,将关于Celery的apply_async()的一些调用方法。后来找到一个帖子,是关于查看和关闭正在启动着的celery进程的。

然后,我就用帖子中的shell指令,查看了一下当前正在运行的celery进程。然后,我就被屏幕中满屏的celery程序给震惊了。我之前明明已经把运行的celery的程序,通过Ctrl + C的方式,关闭了。为什么还会有这么多没有被关闭的celery进程呢。

同时,问题基本上也明了了。就是因为有很多的僵尸celery程序在运行着,导致我丢出去的异步任务,被不知道哪个celery的进程给截获了,而导致我这边始终无法开始运行任务。

2. 问题解决

因此,解决这个问题,就是两个步骤。
首先,查看当前正在进行的celery进程;

ps aux | grep celery

然后,关闭这些所有正在运行着的celery进程,之后再去运行原来出问题的程序,就可以正常的,用celery的apply_async()进行异步调用了。

pkill -f celery

即可解决该问题。

同时,以后如果再遇到类似的问题时,也要优先想到,有可能是当前的任务起了多个进程,其中有一部分是之前不知道什么原因未被正常结束的僵尸进程。他们一直启动着,但是却无法真正工作,还会影响其他的任务。因此,最好是查询一下,是否有在启动着的进程。

参考链接:

  1. Celery文档:
    http://docs.jinkan.org/docs/celery/getting-started/introduction.html
  2. How to stop celery worker process
    https://inneka.com/programming/python/how-to-stop-celery-worker-process/
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Celeryapply_async()方法是用于处理异步任务的常见API。通过调用apply_async()方法,可以将任务丢给Celery,让一个进程去执行任务。这个方法的逻辑是创建一个Celery任务,然后在任务执行之前再次调用apply_async()方法,指定下次执行的定时时间。这样就会产生一个定时的Celery worker。任务执行时,会处理相应的业务逻辑。当达到定时时间时,定时的Celery worker开始执行,然后循环回到第一步。\[1\]\[3\] 然而,有时候在使用apply_async()接口时可能会出现问题。比如,任务可能会丢失,就像将一个石头丢进了大海里一样,消失了。这可能是因为在使用异步调用时出现了故障,而同步调用则没有问题。对于这种情况,需要仔细检查代码和配置,确保正确地使用apply_async()方法,并且没有其他错误导致任务丢失。\[2\] #### 引用[.reference_title] - *1* [celery apply_async定时任务重复执行问题](https://blog.csdn.net/qq_21918903/article/details/126663161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Celeryapply_async()无法正常工作解决方案之一](https://blog.csdn.net/inter_peng/article/details/104706810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inter_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值