celery简单的尝试

Celery - 分布式任务队列

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。

何为任务队列?

任务队列是一种在线程或机器间分发任务的机制。

等等~~~~~

详情 建议先搞懂原理

  http://docs.jinkan.org/docs/celery/getting-started/introduction.html

 

来吧,展示。

1.创建一个 celery_test(自定义), 使用pycharm 

 

2.在 celery_test 下创建一个 celery_task.py

 1 import celery
 2 import time
 3 
 4 backend = 'redis://127.0.0.1:6379/1'
 5 broker = 'redis://127.0.0.1:6379/2'
 6 cel = celery.Celery('test', backend=backend, broker=broker)
 7 
 8 
 9 @cel.task
10 def send_email(name):
11     print("向%s发送邮件..." % name)
12     time.sleep(5)
13     print("向%s发送邮件完成" % name)
14     return "ok"

3.在创建一个 prouduce_task.py 

from celery_task import send_email

result = send_email.delay("yuan")
print(result.id)

4.在 Terminal 中 使用命令

celery worker -A celery_app_task -l info

执行正常结果为

6.run prouduce_task.py 

打印一个 id

7.你在打开 Terminal 看到这个就正常了

8.在创建一个 result.py

from celery.result import AsyncResult
from celery_task import cel

async_result = AsyncResult(id="254bca5c-231d-412e-846f-a3799b10462a", app=cel)

if async_result.successful():
    result = async_result.get()
    print(result)
    # result.forget() # 将结果删除
elif async_result.failed():
    print('执行失败')
elif async_result.status == 'PENDING':
    print('任务等待中被执行')
elif async_result.status == 'RETRY':
    print('任务异常后正在重试')
elif async_result.status == 'STARTED':
    print('任务已经开始被执行')

这一步再把这里的id 替换成 刚才打印出的的id 在运行result.py 会打印一个 ok 就成功了

 

9.这一步 最为重要 应为 现在普遍电脑都为 win10  所以在执行第六步的时候回报一个错误

解决办法:

(1)先 pip install eventlet

(2) 重新在 Terminal 中执行

celery -A <mymodule> worker -l info -P eventlet

就ok了

运用的 版本

 


 *******改变服务器启动方法不要用eventlet,加个参数
    celery worker -A celery_name --loglevel=info --pool=solo

posted on 2020-07-15 23:27  mldsh  阅读(87)  评论(0)    收藏  举报

导航