繁体   English   中英

Psycopg2-Eventlet连接挂起

[英]Psycopg2 - Eventlet connection hang

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

有什么方法可以防止eventlet进入此状态吗? 有什么办法可以使eventlet脱离此状态。

广东发展银行

#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

抱歉回复晚了。

您是否使用了完整的猴子修补程序?

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

请提供OS,Python,Eventlet和psycopg2的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM