我做了一些测试并证明使用checkout事件处理程序检查断开连接是否与Elixir一起使用.开始认为我的问题与更新:我只是通过调用session.commit()从子进程调用有关?session.commit()下面的子进程,更新示例来反驳自己.我正在使用多处理模块来创建子流程.
这是代码,显示它应该如何工作(甚至没有使用pool_recycle!):
from sqlalchemy import exc
from sqlalchemy import event
from sqlalchemy.pool import Pool
from elixir import *
import multiprocessing as mp
class SubProcess(mp.Process):
def run(self):
a3 = TestModel(name="monkey")
session.commit()
class TestModel(Entity):
name = Field(String(255))
@event.listens_for(Pool, "checkout")
def ping_connection(dbapi_connection, connection_record, connection_proxy):
cursor = dbapi_connection.cursor()
try:
cursor.execute("SELECT 1")
except:
# optional - dispose the whole pool
# instead of invalidating one at a time
# connection_proxy._pool.dispose()
# raise DisconnectionError - pool will …Run Code Online (Sandbox Code Playgroud) python sqlalchemy multiprocessing mysql-python python-elixir