##language:zh #pragma section-numbers off ##含有章节索引导航的 ZPyUG 文章通用模板 <> ## 默许导航,请保留 <> = eurasia异步访问数据库 = ##startInc == 问题 == {{{ 老光 yaoguangming@cq.chinatelecom.com.cn 通过“googlegroups.com” 发件人当地时间 发送时间 15:54 (GMT+08:00)。发送地当前时间:下午4:46。 ✆ 发送至 eurasia-users@googlegroups.com 主题 [eurasia-users] 老大,eurasia的协程,能解决异步访问数据库么? }}} 比如访问sqlite3, mysql, pgsql? * 以我现在的论坛为例,是sqlite3数据库,没有考虑异步的问题,因为发贴,查找等操作大都在1秒以内,在在线人数几十人的时候,不会出现什么问题。 * 但接下来想加入统计方面的应用,需要连内网上的pgsql数据库服务器,执行复杂的sql语句。目前的情况,是不是若通过pgycopg2执行sql语句的话,就会阻塞其他协程?那有没有什么办法解决在一个用户需要统计几十秒的情况下,其他用户可以同时统计,或访问系统的其他部分? === 支持 PostgreeSQ === {{{ 沈崴 wileishn@gmail.com 发件人当地时间 发送时间 15:02 (GMT-07:00)。发送地当前时间:上午1:47。 ✆ 发送至 eurasia-users }}} 在程序前面加上如下代码即可支持 PostgreeSQL: {{{ #!python from eurasia import core from psycopg2 import extensions def wait_callback(conn, timeout=-1): file = core.file(conn.fileno()) while 1: state = conn.poll() if state == extensions.POLL_OK: break elif state == extensions.POLL_READ: file.r_wait(timeout) elif state == extensions.POLL_WRITE: file.w_wait(timeout) else: raise psycopg2.OperationalError( 'Bad result from poll: %r' % state) extensions.set_wait_callback(wait_callback) }}} ##endInc ---- '''反馈''' 创建 by -- ZoomQuiet [<>]