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