[python] Lock

Honza Král honza.kral na gmail.com
Úterý Únor 10 14:55:47 CET 2015


Tohle skutecne neni dobre reseni - napriklad vubec neresi
synchronizaci pristupu ke globalnimu registru zamku a tak to nema
zadnou garanci, ze to skutecne bude fungovat. Namatkou radek 140 kde
se klidne muze stat ze dve vlakna provedou ten samy test a kazde si
vytvori vlastni zamek se stejnym jmenem. A to neresim nekonzistentni
pojmenovani a preklepy (mklock vs mkLock, ...)

Napsat spravne thread-safe kod neni vubec jednoduche, v pythonu
obzvlast - clovek se musi zamyslet nad kazdou operaci nejen v jeho
kodu. Ale to jsme uz hodne daleko od puvodniho tematu :)
Honza Král
E-Mail: honza.kral na gmail.com
Phone:  +420 606 678585


2015-02-10 14:45 GMT+01:00 Petr Messner <petr.messner na gmail.com>:
> Už to asi vidím, každý klient má své vlákno (leda že by se samotný klient
> používal vícevláknově). Příště si dám větší pauzu před odesláním :)
>
>
> PM
>
>
> Dne 10. února 2015 14:39 Petr Messner <petr.messner na gmail.com> napsal(a):
>
>> Jak jsou jednotlivé zprávy od sebe odděleny? Vidím tam v klientovi
>>
>>
>>     def communicate(self, data):
>>         self._socket.send('%s %s' % (self.name, data))
>>         self._socket.recv(self.buffer_size)
>>
>>
>>
>> A server to čte takto:
>>
>>         while True:
>>             data = self._socket.recv(self.buffer_size)
>>
>>             if data in ('', '\n', '\r\n'):
>>                 return
>>
>>             try:
>>                 who, op, name = data.split()
>>             except ValueError:
>>                 raise ValueError('Invalid data')
>>
>>
>>
>> Co když se zprávy pošlou náhodou tak, že
>> self._socket.recv(self.buffer_size) přijme dvě zprávy najednou? To mu pak
>> přijde něco jako "client1 mklock lock1client2 mklock lock2" a nebude to
>> fungovat - server spadne.
>>
>> PM
>>
>>
>> Dne 10. února 2015 14:15 Pavel S <pavel na schon.cz> napsal(a):
>>
>>> Jeste existuje tzv. DLM (Distributed Lock Manager). Zjednodusene receno,
>>> je to mutex, ktery je pristupny po siti.
>>>
>>> Jeden takovy jednoduchy distributed lock manager jsem napsal v pythonu a
>>> umistil na activestate zde:
>>> http://code.activestate.com/recipes/578194-distributed-lock-manager-for-python/
>>> _______________________________________________
>>> 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ší informace o konferenci Python