Jestli nemusi byt MySQL tak mas napul vyhrano - MySQL je v 99% ten problem. </rant>
Honza Král E-Mail: honza.k...@gmail.com Phone: +420 606 678585 2015-02-09 15:13 GMT+01:00 mtip <m...@atlas.cz>: > Díky za postrčení, nedošlo mi, že to může být jiný proces a ne thread. > > Transakce jsem použít nechtěl, protože databáze nemusí být innodb dokonce > ani mysql. > > > Mirek > -------------------------------- > 9. února 2015, 13:39:48, napsal jste: > > Web server miva typicky vice procesu a tak lokalni zamky nebudou > fungovat. > Presne na tyhle veci se ale hodi db transakce, rozhidne lepsi nastroj - > podivej se na 'select ... for update' a 'isolation level'. > On Feb 9, 2015 11:43 AM, "mtip" <m...@atlas.cz> wrote: > 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 > > _______________________________________________ > Python mailing list > python@py.cz > http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz > > _______________________________________________ > Python mailing list > python@py.cz > http://www.py.cz/mailman/listinfo/python > > Visit: http://www.py.cz >
_______________________________________________ Python mailing list python@py.cz http://www.py.cz/mailman/listinfo/python Visit: http://www.py.cz