tornado+momoko无法处理连接

2024-03-29 01:59:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用tornado(4.2.1)+momoko(2.2.0)+psycopg2(2.6.1)作为小型web应用程序,在PostgreSQL服务器关闭连接之前,它可以正常工作。然后每次数据库执行()命令我收到错误消息:

Traceback (most recent call last):
      File "C:\Python27\lib\site-packages\tornado-4.2.1-py2.7-win32.egg\tornado\web.py", line 1415, in _execute
        result = yield result
      File "C:\Python27\lib\site-packages\tornado-4.2.1-py2.7-win32.egg\tornado\gen.py", line 870, in run
        value = future.result()
      File "C:\Python27\lib\site-packages\tornado-4.2.1-py2.7-win32.egg\tornado\concurrent.py", line 215, in result
        raise_exc_info(self._exc_info)
      File "C:\Python27\lib\site-packages\tornado-4.2.1-py2.7-win32.egg\tornado\gen.py", line 876, in run
        yielded = self.gen.throw(*exc_info)
      File "server.py", line 63, in get
        cursor = yield self.db.execute(query)
      File "C:\Python27\lib\site-packages\tornado-4.2.1-py2.7-win32.egg\tornado\gen.py", line 870, in run
        value = future.result()
      File "C:\Python27\lib\site-packages\tornado-4.2.1-py2.7-win32.egg\tornado\concurrent.py", line 215, in result
        raise_exc_info(self._exc_info)
      File "D:\work\program-stat\momoko\connection.py", line 453, in when_available
        future_or_result = method(conn, *args, **kwargs)
      File "D:\work\program-stat\momoko\connection.py", line 743, in execute
        cursor.execute(operation, parameters)
      File "C:\Python27\lib\site-packages\psycopg2\extras.py", line 288, in execute
        return super(NamedTupleCursor, self).execute(query, vars)
    OperationalError: server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.

这里有一个代码:

^{pr2}$

如何处理此异常并自动重新连接到数据库而不重新启动应用程序?在


Tags: inpyinfoexecuteegglibpackagesline
2条回答

Tornado/Momoko/AutoReload公司

问题:

如果到数据库的连接已被破坏-momoko无法重新创建连接池。 要解决此问题,需要重新启动应用程序。为了自动化这个过程,我编写了一个小脚本,使用内置的tornado更新机制。在

解决方案:

每1秒测试一次数据库连接是否有效。 在启动ioloop之前添加此检查。在

导入重新加载 检查连接=tornado.ioloop.PeriodicCallback(λ:reload.reload_如果\u db_pool_死了(应用程序数据库),1000) 检查_连接.启动()

https://gist.github.com/MaxRV/d7180e63d6b5396d904d446653aa7e88

您可以添加参数:

raise_connect_errors=False,

创建连接池时:

^{pr2}$

但这并不总是有帮助的。在

相关问题 更多 >