[python] Lock
mtip
mtip na atlas.cz
Pondělí Únor 9 11:42:35 CET 2015
Ahoj,
narazil jsem na problém se zámkem.
Mám aplikaci na web serveru, která ukládá příznak booolean Zaplaceno
do MySQL databáze.
Občas se ale stane, že potvrzení platby přijde najednou ve stejný čas
ze dvou zdrojů. Chtěl jsem to vyřešit zámkem, což ale nepomůže.
Princip kódu:
from threading import Lock
lock = Lock()
lock.acquire()
try:
mysql_cursor.execute("SELECT Zaplaceno FROM platby WHERE Id=%s", (1,))
if mysql_cursor.fetchall()[0]['Zaplaceno'] == 0:
mysql_cursor.execute("UPDATE Zaplaceno=1 FROM platby WHERE Id=%s", (1,))
mysql_connection.commit()
# dalsi zpracovani platby...
finally:
lock.release()
Pokud je request spuštěn 2x ve stený čas provede se zpracování platby 2x.
Přičemž ale SELECT je pod zámkem, takže by se neměl provést mezi SELECT a UPDATE druhého threadu.
Netušíte, kde může být problém?
Díky za odpovědi.
Mirek
Další informace o konferenci Python