[python] Lock
Honza Král
honza.kral na gmail.com
Úterý Únor 10 16:14:16 CET 2015
Protoze si pokazde vytvaris novy zamek misto aby si mel jeden o ktere se ty
thready budou prat.
Honza Král
E-Mail: honza.kral na gmail.com
Phone: +420 606 678585
2015-02-10 16:12 GMT+01:00 mtip <mtip na atlas.cz>:
> Stejně mi není jasné proč to nefungovalo.
> Server je wsgi daemon a je spuštěn s jením procesem a 25 threadu.
> Pak by měl threading.Lock fungovat.
>
>
> 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" <mtip na 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 na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20150210/fa64cb2e/attachment.html>
Další informace o konferenci Python