不想用celery,简单造个轮子
利用消息队列异步执行耗时任务
python 3.6.5
tornado
rabbimq
基本原理
-
简单起见,两个队列:任务队列(task_queue)和任务结果队列(result_queue)
- task_queue
web端发送任务,后台程序读取任务 - result_queue
后台程序执行结果反馈到这个队列中,供web端的消费者读取
- task_queue
-
通过消息中的唯一标识,任务和任务结果可以匹配
-
主要涉及pika的基本运用,以及pika中的TornadoConnection
-
另外尝试过aioamqp,不过basice_consume之后没有basic_ack
-
pickle序列化很趁手
-
用基本规则方便跨语言(可以用json)
源码及测试用例
避免误人,特别声明:瞎折腾,代码不可靠。
补充:
如果在Windows遇到 too many file descriptors in select
https://blog.magentaize.net/fix-python-too-many-file-descriptors-in-select-in-windows/
网友评论