博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python tornado
阅读量:6635 次
发布时间:2019-06-25

本文共 1283 字,大约阅读时间需要 4 分钟。

hot3.png

安装:

??

tornado 多进程 数据同步

tornado mysql

Tornado 标榜的是 asynchronous 和 non-blocking,然而,很多时候一不小心一不讲究就会把整个 tornado 阻塞住,特别是做 MySQL 操作时。本文简述两种在 tornado 中异步无阻塞地使用 MySQL 的方法。

常见的阻塞情况

class Handler(tornado.web.RequestHandler):    def get(self):        connection = pymysql.connect()        # 连接数据库的相关参数省略         with connection.cursor() as cursor:            sql = '这里应该有一条SQL查询语句'            cursor.execute(sql)            result = cursor.fetchone()         self.write(str(result['id']))

以上这种情景,tornado 会在 pymysql.connect() 和 cursor.execute(sql) 的地方阻塞住,无法响应其他 request。

无阻塞方案1:使用 Tornado-MySQL 作者不维护,不用为好。

无阻塞方案2:使用 Celery

Celery 是一个异步的任务队列,它能很方便地支持分布式扩展,因而很适合将 tornado 中的长时间的阻塞工作交由 Celery 来完成。 而要 Celery 配合 Tornado 一起工作,需要借助一个名为 tornado-celery 请戳 pypi 页面的包。

看例子,首先是 tornado handler 的代码:

import tornado.genimport tornado.webimport tcelery import mysql_task tcelery.setup_nonblocking_producer() class Handler(tornado.web.RequestHandler):     @tornado.web.asynchronous    @tornado.gen.coroutine    def get(self):        result = yield tornado.gen.Task(mysql_task.mysql_test.apply_async)         self.write(result)        self.finish()

而具体操作 MySQL 的部分则摆在 mysql_task.py 文件中。至于 celery worker 的写法这里就省略掉了。

特别需要注意的是:tornado-celery 目前只支持 AMQP 的 backend。

转载于:https://my.oschina.net/u/1177171/blog/1628202

你可能感兴趣的文章
深入讲解RPM包安装/升级/查询/卸载
查看>>
Eclipse使用EGit管理git@OSC项目
查看>>
Ehcache(01)——简介、基本操作
查看>>
idea及其插件sbt,Scala安装配置
查看>>
设计模式--这段很重要
查看>>
java读取指定package下的所有class
查看>>
settimeout 推荐的最小值
查看>>
MySQL 常用命令
查看>>
HttpClient4上传文件
查看>>
centos6.4和Ubuntu14.04搭建SNMP服务
查看>>
为微信小程序增加mixin扩展
查看>>
敏感信息识别方法探究
查看>>
创建一个可执行的python脚本
查看>>
听云APP 图表分析
查看>>
Oracle排名函数运用实例
查看>>
【推荐】[网址]PHP各种开源网站系统、cms系统一览[持续更新]
查看>>
整合 Apache 与 Tomcat
查看>>
螺旋矩阵打印java实现
查看>>
Angular 错误提示三
查看>>
easyui设置复选框 不可以选择 全选 也不能选择设置不可以选择的
查看>>