-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
解决MySQL在线查询超时后,查询会话没有主动关闭的问题 #302
Conversation
Codecov Report
@@ Coverage Diff @@
## master #302 +/- ##
==========================================
- Coverage 85.06% 85.05% -0.01%
==========================================
Files 66 66
Lines 8630 8658 +28
==========================================
+ Hits 7341 7364 +23
- Misses 1289 1294 +5
Continue to review full report at Codecov.
|
有没有可能单做一个query函数把engine包一下。这样就没有pickle的问题了 |
或者传过去之前把connection 设为 None (这个方法有些dirty |
connection设置为None,执行query时会重新get_connection,thread_id就不一致了,最开始貌似redis也是类似的问题#131 |
可以有一个人query with timeout的函数,然后在里面getengine,然后query,开始计时,过期后开始杀进程。 要是django-Q原生支持超时也回调函数就好了,超时直接杀死太傻逼了 |
只杀python的查询进程的话效果应该是一致的,远端的mysql会话依然不会断开 使用task可以保证前端页面关闭后,如果到超时时间还是可以正常杀掉,不过实现确实不优雅,找不到更合适的处理方式 |
先合了,后面可以再调整 |
在执行sql查询之前可以设置SESSION参数MAX_EXECUTION_TIME与异步task超时时间一致,如cursor.execute('SET SESSION MAX_EXECUTION_TIME=100000;')。达到该时间后mysql中的查询会话如无正常结束会被自动清理掉。 |
@chenhaichao04 这个最开始考虑过,不过参数是5.7.8才引入的,不能完全通用,就不在采用范围内 |
关联PR:#125
采取原PR中的第二种实现
弊端:
但是问题是解决了,各类数据库拓展对应的方法也可以实现