Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @contextmanager
- def transaction(connection):
- trans = connection.begin()
- try:
- yield trans
- except Exception:
- trans.rollback()
- raise
- else:
- trans.commit()
- def deadlock_first():
- import time
- time.sleep(1)
- engine = sqlalchemy.create_engine('postgresql://{user}:{password}@{host}:{port}/{db}'.format(**config))
- connect = engine.connect()
- print(connect)
- sql = "select func1();"
- with transaction(connect) as trans:
- connect.execute(sql)
- def deadlock_retry():
- engine = sqlalchemy.create_engine('postgresql://{user}:{password}@{host}:{port}/{db}'.format(**config))
- connect = engine.connect()
- print(connect)
- sql = "select func2();"
- try:
- with transaction(connect) as trans:
- connect.execute(sql)
- except sqlalchemy.exc.OperationalError as e:
- if "deadlock" in str(e):
- with transaction(connect) as trans:
- connect.execute(sql)
- def main():
- t1 = threading.Thread(target=deadlock_first)
- t2 = threading.Thread(target=deadlock_retry)
- t1.start()
- t2.start()
Add Comment
Please, Sign In to add comment