本文主要是介绍Celery 4.3.0 在task中执行多线程任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
测试Celery任务能否使用多线程
在开发的调试过程中,发现如果在django项目里面或者celery的task中使用协程gevent的话,使用monkey补丁的时候会报错。
那么尝试了很久,发现在celery中是可以执行多线程的,下面来演示一下执行的示例。
编写使用多线程的task
import threading
from time import sleep,ctimedef smoke():for i in range(3):print("smoke...%d"%i)sleep(10)def drunk():for i in range(3):print("drink...%d"%i)sleep(10)@celery_app.task
def test_use_thread():print('---开始---:%s' % ctime())t1 = threading.Thread(target=smoke)t2 = threading.Thread(target=drunk)t1.start()t2.start()while True:length = len(threading.enumerate())print("当前运行的线程数为:%d" % length)if length <= 1:breaksleep(0.5)# sleep(5) #print('---结束---:%s' % ctime())
启动celery服务
celery -A celery_tasks worker -l info -P eventlet
在django项目的交互模式下执行多线程的task任务
In [1]: from celery_tasks.tasks import test_use_threadIn [2]: test_use_thread.delay()
Out[2]: <AsyncResult: 69bba7b0-3808-47f1-ad36-2fea75930901>
查看celery中的执行打印情况
可以看到任务顺利并发执行,也就是Celery虽然自身已经是异步任务,还是可以继续在task中使用多线程的。
这篇关于Celery 4.3.0 在task中执行多线程任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!