Python Psycopg2-Eventlet连接挂起

Python Psycopg2-Eventlet连接挂起,python,psycopg2,eventlet,Python,Psycopg2,Eventlet,我有一个与postgresql服务器保持持久连接的程序。假设连接由于网络问题而被阻塞(可以通过关闭网络接口来模拟),那么使用eventlet调用查询的进程将被卡住。这会阻止其他Eventlet也执行。附加gdb表示进程在psycopg2 C代码中被阻止。我试过postgresql TCP keepalives。但是,如果在连接丢失后立即调用查询,这也会失败 有没有办法防止eventlet进入这种状态?有没有办法让eventlet脱离这个状态 GDB #0 0x00002b4e7836be46

我有一个与postgresql服务器保持持久连接的程序。假设连接由于网络问题而被阻塞(可以通过关闭网络接口来模拟),那么使用eventlet调用查询的进程将被卡住。这会阻止其他Eventlet也执行。附加gdb表示进程在psycopg2 C代码中被阻止。我试过postgresql TCP keepalives。但是,如果在连接丢失后立即调用查询,这也会失败

有没有办法防止eventlet进入这种状态?有没有办法让eventlet脱离这个状态

GDB

#0  0x00002b4e7836be46 in poll () from /lib64/libc.so.6
#1  0x00002b4e835dec4f in ?? () from /usr/pgsql-9.0/lib/libpq.so.5
#2  0x00002b4e835ded50 in ?? () from /usr/pgsql-9.0/lib/libpq.so.5
#3  0x00002b4e835dd28e in PQgetResult () from /usr/pgsql-9.0/lib/libpq.so.5
#4  0x00002b4e833a4284 in psyco_exec_green (conn=0x21f42510, command=<value optimized out>) at psycopg/green.c:195
#5  0x00002b4e833a5387 in pq_execute_command_locked (conn=0x21f42510, 
    query=0x2b4e833b5de8 "BEGIN; SET TRANSACTION ISOLATION LEVEL READ COMMITTED", pgres=0x7fff84c38448, error=0x7fff84c38440, 
    tstate=0x7fff84c38438) at psycopg/pqpath.c:342
#6  0x00002b4e833a58f7 in pq_begin_locked (conn=0x21f42510, pgres=0xffffffffffffffff, error=0xffffffffffffffff, tstate=0x0)
    at psycopg/pqpath.c:424
#7  0x00002b4e833a59a0 in pq_execute (curs=0x1f487528, query=0x2248c894 "SELECT 1", async=0) at psycopg/pqpath.c:764
#8  0x00002b4e833ab15b in _psyco_curs_execute (self=0x1f487528, operation=0x0, vars=0x21ec9a80, async=0)
    at psycopg/cursor_type.c:419
#9  0x00002b4e833ab7b1 in psyco_curs_execute (self=0x1f487528, args=<value optimized out>, kwargs=<value optimized out>)
    at psycopg/cursor_type.c:475
#0 0x00002b4e7836be46在/lib64/libc.so.6的poll()中
#1 0x00002b4e835dec4f英寸??()来自/usr/pgsql-9.0/lib/libpq.so.5
#2 0x00002b4e835ded50英寸??()来自/usr/pgsql-9.0/lib/libpq.so.5
#来自/usr/pgsql-9.0/lib/libpq.so.5的PQgetResult()中的3 0x00002b4e835dd28e
#4 0x00002b4e833a4284在psyco_exec_绿色中(conn=0x21f42510,command=)位于psycopg/green.c:195
#5 0x00002b4e833a5387在pq_执行_命令_锁定(conn=0x21f42510,
query=0x2b4e833b5de8“开始;设置事务隔离级别读取已提交”,pgres=0x7fff84c38448,错误=0x7fff84c38440,
psycopg/pqpath处的tstate=0x7fff84c38438)。c:342
#pq中的6 0x00002b4e833a58f7开始锁定(conn=0x21f42510,pgres=0xFFFFFFFFFFFF,error=0xFFFFFFFFFFFF,tstate=0x0)
在psycopg/pqpath.c:424
#7在psycopg/pqpath执行pq_中的0x00002b4e833a59a0(curs=0x1f487528,query=0x2248c894“选择1”,异步=0)。c:764
#8 0x00002b4e833ab15b在执行(self=0x1f487528,operation=0x0,vars=0x21ec9a80,async=0)
在psycopg/cursor_type.c:419
#在psyco_curs_execute中执行9 0x00002b4e833ab7b1(self=0x1f487528,args=,kwargs=)
在psycopg/cursor_type.c:475处
很抱歉回复晚了

你用了完整的猴子补丁吗

如果错误仍然存在,请通过以下任一方式报告:

  • 电邮至eventletdev@lists.secondlife.com
请提供操作系统、Python、Eventlet和psycopg2的版本。

很抱歉回复太晚

你用了完整的猴子补丁吗

如果错误仍然存在,请通过以下任一方式报告:

  • 电邮至eventletdev@lists.secondlife.com
请提供OS、Python、Eventlet和psycopg2的版本