我是靠谱客的博主 贪玩花卷,最近开发中收集的这篇文章主要介绍sqlalchemy mysql死锁_python – 重试MySQL / SQLAlchemy的死锁,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我已经搜索了一段时间了,找不到我的问题的解决方案.我们正在使用SQLAlchemy与

MySQL结合我们的项目,我们遇到几次可怕的错误:

1213, ‘Deadlock found when trying to get lock; try restarting transaction’.

在这种情况下,我们最多尝试重新启动交易三次.

我已经开始编写一个这样做的装饰器,但是我不知道如何在失败之前保存会话状态,并在之后重试相同的事务? (由于SQLAlchemy需要在引发异常时回滚)

我的工作到目前为止,

def retry_on_deadlock_decorator(func):

lock_messages_error = ['Deadlock found', 'Lock wait timeout exceeded']

@wraps(func)

def wrapper(*args, **kwargs):

attempt_count = 0

while attempt_count < settings.MAXIMUM_RETRY_ON_DEADLOCK:

try:

return func(*args, **kwargs)

except OperationalError as e:

if any(msg in e.message for msg in lock_messages_error)

and attempt_count <= settings.MAXIMUM_RETRY_ON_DEADLOCK:

logger.error('Deadlock detected. Trying sql transaction once more. Attempts count: %s'

% (attempt_count + 1))

else:

raise

attempt_count += 1

return wrapper

最后

以上就是贪玩花卷为你收集整理的sqlalchemy mysql死锁_python – 重试MySQL / SQLAlchemy的死锁的全部内容,希望文章能够帮你解决sqlalchemy mysql死锁_python – 重试MySQL / SQLAlchemy的死锁所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部