Thread View: pl.comp.lang.python
5 messages
5 total messages
Started by królewna
Wed, 24 Feb 2010 13:26
Wielowątkowy dostęp do MySQL
Author: królewna
Date: Wed, 24 Feb 2010 13:26
Date: Wed, 24 Feb 2010 13:26
17 lines
1652 bytes
1652 bytes
Czy jeśli posiadam parę wątków, którym przez parametr przekazuje obiekt
MySQLdb.connection i w każdym wątku tworzę nowy kursor to czy każdy
kursor we wszystkich wątkach jest tym samym kursorem? Chodzi o to, że
właśnie dodaje równolegle w paru wątkach informacje do bazy i jeśli nie
użyję semaforów podczas dodawania do niej, to wywala mi błąd:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "./savers/ping.py", line 26, in save
db.commit()
OperationalError: (2013, 'Lost connection to MySQL server during query')
Pewnie jak zwykle popełniam głupi błąd ale mam nadzieję, że Panowie
pomożecie.
Re: Wielowątkowy dostęp do MySQL
Author: Darek
Date: Wed, 24 Feb 2010 14:28
Date: Wed, 24 Feb 2010 14:28
26 lines
2457 bytes
2457 bytes
On 24 Lut, 14:26, królewna <krole...@ee.pl> wrote: > Czy jeśli posiadam parę wątków, którym przez parametr przekazuje obiekt > MySQLdb.connection i w każdym wątku tworzę nowy kursor to czy każdy > kursor we wszystkich wątkach jest tym samym kursorem? Chodzi o to, że > właśnie dodaje równolegle w paru wątkach informacje do bazy i jeśli nie > użyję semaforów podczas dodawania do niej, to wywala mi błąd: > > Traceback (most recent call last): > File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner > self.run() > File "/usr/lib/python2.6/threading.py", line 477, in run > self.__target(*self.__args, **self.__kwargs) > File "./savers/ping.py", line 26, in save > db.commit() > OperationalError: (2013, 'Lost connection to MySQL server during query') > > Pewnie jak zwykle popełniam głupi błąd ale mam nadzieję, że Panowie > pomożecie. Po pierwsze: MySQL nie wspiera kursorów, sa one emulowane po stronie drivera. Po drugie: "The MySQL protocol can not handle multiple threads using the same connection at once." Rozwiązanie (najprostsze): Implementacja managera zarządzającego pólą połączeń dla wątków (+cache)
Re: Wielowątkowy dostęp do MySQL
Author: Bart Ogryczak
Date: Wed, 24 Feb 2010 14:32
Date: Wed, 24 Feb 2010 14:32
22 lines
2093 bytes
2093 bytes
On Feb 24, 2:26 pm, królewna <krole...@ee.pl> wrote: > Czy jeśli posiadam parę wątków, którym przez parametr przekazuje obiekt > MySQLdb.connection i w każdym wątku tworzę nowy kursor to czy każdy > kursor we wszystkich wątkach jest tym samym kursorem? W MySQL nie ma kursorów[1], więc de facto w twoim przypadku kursor == połączenie. > Chodzi o to, że > właśnie dodaje równolegle w paru wątkach informacje do bazy i jeśli nie > użyję semaforów podczas dodawania do niej, Masz 3 wyjścia: 1) używać semaforów; 2) używać wielu połączeń (nieco bez sensu); 3) zrobić wątek, który będzie wykonywał zapytania asynchronicznie. Czyli będziesz mu wrzucać zapytania do kolejki, on je wykona i zwróci wynik do innej kolejki (albo callbackiem). [1] ok, nie do końca prawda, kursory są, ale w procedurach i wyzwalaczach. Czyli z punktu widzenia MySQLdb są bez znaczenia.
Re: Wielowątkowy dostęp do MySQL
Author: Darek
Date: Thu, 25 Feb 2010 08:55
Date: Thu, 25 Feb 2010 08:55
4 lines
1483 bytes
1483 bytes
On 24 Lut, 15:32, Bart Ogryczak <b.ogryc...@gmail.com> wrote: > [1] ok, nie do końca prawda, kursory są, ale w procedurach i > wyzwalaczach. Czyli z punktu widzenia MySQLdb są bez znaczenia. True. Chodziło mi oczywiście o istotność dla drivera.
Re: Wielowątkowy dostęp do MySQL
Author: królewna
Date: Thu, 25 Feb 2010 09:52
Date: Thu, 25 Feb 2010 09:52
12 lines
1570 bytes
1570 bytes
W dniu 24.02.2010 15:32, Bart Ogryczak pisze: > > Masz 3 wyjścia: > 1) używać semaforów; > 2) używać wielu połączeń (nieco bez sensu); > 3) zrobić wątek, który będzie wykonywał zapytania asynchronicznie. > Czyli będziesz mu wrzucać zapytania do kolejki, on je wykona i zwróci > wynik do innej kolejki (albo callbackiem). No cóż czyli tak właściwie jedno połączenie == jeden "kursor". Wydawało mi się właśnie, że tak może być dlatego poleciałam semaforami. I chyba przy nich zostanę jako przy najprostszym rozwiązaniu.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads