基于amqp的工人/主模式框架
crew的Python项目详细描述
用于Tornado的基于AMQP的RPC库
用例
- 任务队列
- 不同CPU绑定的HTTP处理程序的负载平衡
- …涉及rpc的其他系统
安装
pip install crew
示例
请参阅完整的example。
使用量
例如,创建第一个应用程序,并另存为master.py:
import tornado.ioloop import tornado.gen import tornado.web import tornado.log import json import tornado.options from crew import TimeoutError, ExpirationError from crew.master.tornado import Client class MainHandler(tornado.web.RequestHandler): @tornado.gen.coroutine def get(self): resp = yield self.settings['crew'].call(None, priority=100) self.write(json.dumps(resp)) cl = Client() application = tornado.web.Application( [ (r"/", MainHandler), ], crew=cl, autoreload=True, debug=True, ) if __name__ == "__main__": cl.connect() tornado.options.parse_command_line() application.listen(8888) tornado.ioloop.IOLoop.instance().start()
然后创建第一个任务,并另存为worker.py:
# encoding: utf-8 from crew.worker import run, context, Task @Task('test') def long_task(req): context.settings.counter += 1 return {"counter": context.settings.counter} run( counter=0 )
之后运行:
$ python master.py & $ python worker.py & $ wait
尝试测试:
$ curl http://localhost:8888/