如何使用Python3.4在龙卷风中进行异步mysql操作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用Python3.4在龙卷风中进行异步mysql操作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1929字,纯文字阅读大概需要3分钟。
内容图文
![如何使用Python3.4在龙卷风中进行异步mysql操作?](/upload/InfoBanner/zyjiaocheng/882/afd997e732ca4189823fb98c8dbf8d20.jpg)
我现在使用Python3.4,并且想在Tornado中使用异步mysql客户端.我发现torndb,但是在阅读其源代码之后,我认为它无法进行异步mysql操作,因为它仅封装了MySQLdb程序包.
那么有没有办法在Tornado中进行异步mysql操作呢?
解决方法:
将MySQL与龙卷风一起使用的规范方法是使用一组独立的进程与MySQL对话,并使用异步http请求与这些服务器对话(另请参见Is Tornado really non-blocking?中的答案2).这些进程可以在同一台计算机上,并使用龙卷风或其他位置的应用程序服务器.一个最小的例子:
import json, sys, time
from MySQLdb import connect, cursors
from tornado import gen, httpclient, web, netutil, process, httpserver, ioloop
class BackendHandler(web.RequestHandler):
def get(self):
time.sleep(1) # simulate longer query
cur = connect(db='tornado', user='root').cursor(cursors.DictCursor)
cur.execute("SELECT * FROM foo")
self.write(json.dumps(list(cur.fetchall())))
class FrontendHandler(web.RequestHandler):
@gen.coroutine
def get(self):
http_client = httpclient.AsyncHTTPClient(max_clients=500)
response = yield http_client.fetch("http://localhost:8001/foo")
self.set_header("Content-Type", 'application/json')
self.write(response.body)
if __name__ == "__main__":
number_of_be_tasks = int(sys.argv[1]) if len(sys.argv) > 1 else 20
number_of_fe_tasks = int(sys.argv[2]) if len(sys.argv) > 2 else 1
fe_sockets = netutil.bind_sockets(8000) # need to bind sockets
be_sockets = netutil.bind_sockets(8001) # before forking
task_id = process.fork_processes(number_of_be_tasks + number_of_fe_tasks)
if task_id < number_of_fe_tasks:
handler_class = FrontendHandler
sockets = fe_sockets
else:
handler_class = BackendHandler
sockets = be_sockets
httpserver.HTTPServer(web.Application([(r"/foo", handler_class)])
).add_sockets(sockets)
ioloop.IOLoop.instance().start()
就是说,如果您的Web服务器要做的主要事情就是直接与MySQL对话,那么龙卷风并不会给您带来太多好处(因为您需要与并发MySQL连接一样多的进程).在那种情况下,更好的堆栈可能是nginx uwsgi python.龙卷风真正的好处是可能使用HTTP与多个后端服务器通信,使用HTTP.
内容总结
以上是互联网集市为您收集整理的如何使用Python3.4在龙卷风中进行异步mysql操作?全部内容,希望文章能够帮你解决如何使用Python3.4在龙卷风中进行异步mysql操作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。