tornado中使用celery实现异步MySQL操作
2015-01-04 21:17
507 查看
tornado-celery 是基于celery的tornado客户端,通过tornado-celery可以将耗时任务加入到任务队列中处理,在celery中创建任务,tornado中就可以像调用AsyncHttpClient一样调用这些任务。
使用celery需要选择一种broker(中间人)进行消息的接受和发送,中间人通常作为一种独立的服务,常用的broker又RabbitMQ、Redis以及MongoDB等。
RabbitMQ 是AMPQ高级消息队列协议的实现,是使用最广泛的消息系统,因为tornado-celery中使用redis无法使用callback,建议使用RabbitMQ作为broker。
下面是准备工作
-
安装tornado、celery、tornado-celery
-
安装RabbitMQ
mac上使用brew安装该服务程序brew install rabbitmq
-
启动rabbitmq-server
sudo rabbitmq-server -detached
准备工作完成后就可以编码了
-
创建tasks.py
celery = Celery('tasks', broker='amqp://') celery.conf.CELERY_RESULT_BACKEND = os.environ.get('CELERY_RESULT_BACKEND', 'amqp') @celery.task(name='task.query_users') def query_users(admin_id): # 耗时的数据库操作 return db.query_all_users(admin_id)
-
?运行tasks.py
python tasks.py worker --loglevel=info
-
创建handler
import tcelery tcelery.setup_nonblocking_producer() from tasks import query_users calss Users(RequestHandler): @asynchronous def get(): # 参数通过args的list传递,回调通过callback指定 query_users.apply_async(args=[admin_id], callback=self.on_success) def on_success(self, response): # 获取返回的结果 users = response.result self.write(users) self.finish()
这样,query_users的请求就变成异步非阻塞的了,同理,其他的耗时操作可以放到task中供tornado的请求调用。
相关文章推荐
- tornado中使用celery实现异步MySQL操作
- tornado中使用celery实现异步MySQL操作
- 在tornado中使用celery实现异步任务处理之二
- 在tornado中使用celery实现异步任务处理之一
- 在tornado中使用celery实现异步任务处理之中的一个
- 使用django+celery+RabbitMQ实现异步执行
- 在MySQL中使用init-connect与binlog来实现用户操作追踪记录
- 使用django+celery+RabbitMQ实现异步执行
- 使用redux-thunk实现异步操作的中止
- Tornado Celery Redis实现异步
- 如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
- Django 使用 Celery 实现异步任务
- 使用django+celery+RabbitMQ实现异步执行
- mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)
- 使用Guava+Spring实现异步回调操作,提高程序性能
- 【转】 mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)
- Django中使用celery实现异步任务,并在后台运行(守护进程)
- python使用pymysql实现操作mysql
- MySQL中使用INNER JOIN来实现Intersect交集操作
- 安卓多线程#2--如何使用类AsyncTask实现异步耗时操作 推荐