twisted使用数据库

+ twisted使用数据库

Twisted 是一个事件驱动的框架,因此,其事件循环一旦启动即持续运行,直到事件完成.在 Twisted 中,事件循环使用名为 reactor 的对象进行实施.使用 reactor.run 方法启动 Twisted 事件循环,使用 reactor.stop 停止该循环.而另一个名为 Deferred 的 Twisted 对象用于管理回调.以下是简化了的现实中的 Twisted 事件循环和回调示例.name 测试用于确保解决方案将仅在该模块作为主脚本调用但不导入时(即,必须从命令行、使用 IDLE Python GUI 或通过单击图标调用该解决方案)运行.

#File: twistedsimple.py #A simple example of a Twisted app

from twisted.internet import reactor from twisted.enterprise import adbapi

def printResult(rslt): print rslt00 reactor.stop()

if name == “main“: dbpool = adbapi.ConnectionPool(‘cx_Oracle’, user=‘hr’, password =‘hr’, dsn=‘127.0.0.1/XE’) empno = 100 deferred = dbpool.runQuery(“SELECT last_name FROM employees WHERE employee_id = :empno”, {‘empno’:empno}) deferred.addCallback(printResult) reactor.run()

请注意,twisted.enterprise.adbapi 模块基于标准 DB-API 接口构建,并在后台使用您在调用 adbapi.ConnectionPool 方法时指定的 Python 数据库模块.甚至您在指定 adbapi.ConnectionPool 输入参数时可以使用的一组关键字也取决于您使用的数据库模块类型.

尽管与不同的 Python 数据库模块结合使用时语法上有一些不同,但是通过 twisted.enterprise.adbapi,您可以编写异步代码,从而可以在后台安全处理数据库相关任务的同时,继续执行您的程序流.以下示例展示了一个以异步方式查询数据库的简单 Twisted Web 应用程序.该示例假设您已经创建了 blob_tab 表并为其填充了数据(如本文开始部分“Python 中的多线程编程”一节中所述).