<div dir="ltr">Jestli nemusi byt MySQL tak mas napul vyhrano - MySQL je v 99% ten problem. </rant><br></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature">Honza Král<br>E-Mail: <a href="mailto:honza.kral@gmail.com" target="_blank">honza.kral@gmail.com</a><br>Phone: +420 606 678585</div></div>
<br><div class="gmail_quote">2015-02-09 15:13 GMT+01:00 mtip <span dir="ltr"><<a href="mailto:mtip@atlas.cz" target="_blank">mtip@atlas.cz</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<span style="font-family:'Courier New';font-size:9pt">Díky za postrčení, nedošlo mi, že to může být jiný proces a ne thread.<br>
<br>
Transakce jsem použít nechtěl, protože databáze nemusí být innodb dokonce ani mysql.<br>
<br>
<br>
Mirek<br>
--------------------------------<br>
9. února 2015, 13:39:48, napsal jste:<br>
</span><div><div class="h5"><table>
<tbody><tr>
<td bgcolor="#0000ff" width="10"><br>
</td>
<td width="910"><span style="font-family:'courier new';font-size:9pt">Web server miva typicky vice procesu a tak lokalni zamky nebudou fungovat.<br>
Presne na tyhle veci se ale hodi db transakce, rozhidne lepsi nastroj - podivej se na 'select ... for update' a 'isolation level'.<br>
On Feb 9, 2015 11:43 AM, "mtip" <<a href="mailto:mtip@atlas.cz" target="_blank">mtip@atlas.cz</a>> wrote:<br>
Ahoj,<br>
narazil jsem na problém se zámkem.<br>
<br>
Mám aplikaci na web serveru, která ukládá příznak booolean Zaplaceno<br>
do MySQL databáze.<br>
Občas se ale stane, že potvrzení platby přijde najednou ve stejný čas<br>
ze dvou zdrojů. Chtěl jsem to vyřešit zámkem, což ale nepomůže.<br>
<br>
Princip kódu:<br>
<br>
from threading import Lock<br>
lock = Lock()<br>
lock.acquire()<br>
try:<br>
mysql_cursor.execute("SELECT Zaplaceno FROM platby WHERE Id=%s", (1,))<br>
if mysql_cursor.fetchall()[0]['Zaplaceno'] == 0:<br>
mysql_cursor.execute("UPDATE Zaplaceno=1 FROM platby WHERE Id=%s", (1,))<br>
mysql_connection.commit()<br>
# dalsi zpracovani platby...<br>
finally:<br>
lock.release()<br>
<br>
<br>
<br>
Pokud je request spuštěn 2x ve stený čas provede se zpracování platby 2x.<br>
Přičemž ale SELECT je pod zámkem, takže by se neměl provést mezi SELECT a UPDATE druhého threadu.<br>
Netušíte, kde může být problém?<br>
<br>
Díky za odpovědi.<br>
<br>
Mirek<br>
<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:python@py.cz" target="_blank">python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
<br>
Visit: <a href="http://www.py.cz" target="_blank">http://www.py.cz</a></span></td>
</tr>
</tbody></table>
</div></div></div>
<br>_______________________________________________<br>
Python mailing list<br>
<a href="mailto:python@py.cz">python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
<br>
Visit: <a href="http://www.py.cz" target="_blank">http://www.py.cz</a><br></blockquote></div><br></div>