Thread View: pl.comp.lang.python
5 messages
5 total messages
Started by królewna
Thu, 18 Feb 2010 15:33
Runtime error bez pełnego trace'a?
Author: królewna
Date: Thu, 18 Feb 2010 15:33
Date: Thu, 18 Feb 2010 15:33
18 lines
1441 bytes
1441 bytes
Witam,
Podczas działania programu wyskakuje mi error, który nie powoduje
przerwania działania programu (wielowątkowego - prawdopodobnie istotna
wiadomość):
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/queues.py", line 242, in _feed
send(obj)
UnpickleableError: Cannot pickle <type 'thread.lock'> objects
Niestety jest to pełny trace, który jest wyrzucany. Nie mogę przez to
dokładnie zlokalizować błędu więc byłabym wdzięczna, gdybyście mieli
jakieś pomysły jak go znaleźć. Picklowanie jakiego obiektu może wywołać
taki error?
--
królewna
Re: Runtime error bez pełnego trace'a?
Author: Bart Ogryczak
Date: Thu, 18 Feb 2010 16:05
Date: Thu, 18 Feb 2010 16:05
18 lines
1892 bytes
1892 bytes
On Feb 18, 4:33 pm, królewna <krole...@ee.pl> wrote: > Witam, > > Podczas działania programu wyskakuje mi error, który nie powoduje > przerwania działania programu (wielowątkowego - prawdopodobnie istotna > wiadomość): > > Traceback (most recent call last): > File "/usr/lib/python2.6/multiprocessing/queues.py", line 242, in _feed > send(obj) > UnpickleableError: Cannot pickle <type 'thread.lock'> objects > > Niestety jest to pełny trace, który jest wyrzucany. Nie mogę przez to > dokładnie zlokalizować błędu więc byłabym wdzięczna, gdybyście mieli > jakieś pomysły jak go znaleźć. Picklowanie jakiego obiektu może wywołać > taki error? Eh? <type 'thread.lock'>
Re: Runtime error bez pełnego trace'a?
Author: Daniel Mróz
Date: Fri, 19 Feb 2010 02:41
Date: Fri, 19 Feb 2010 02:41
40 lines
2717 bytes
2717 bytes
On 18.02.2010, królewna <krolewna@ee.pl> wrote: > Podczas działania programu wyskakuje mi error, który nie powoduje > przerwania działania programu (wielowątkowego - prawdopodobnie istotna > wiadomość): Przerwaniu ulega wątek, w którym wystąpił wyjątek. Jeśli nie jest nim wątek główny, do przerwania działania nie dochodzi. Oczywiście wątek umiera. Wypadałoby mieć to na uwadze przy tworzeniu aplikacji. > Traceback (most recent call last): > File "/usr/lib/python2.6/multiprocessing/queues.py", line 242, in _feed > send(obj) > UnpickleableError: Cannot pickle <type 'thread.lock'> objects Wygląda na to, że próbujesz wrzucić w multiprocessing.Queues obiekt, który zawiera instancję thread.lock. Te obiekty nie mogą być zserializowane, gdyż są lockami (ich serializacja w większości przypadków i tak byłaby bez sensu). > Niestety jest to pełny trace, który jest wyrzucany. Nie mogę przez to > dokładnie zlokalizować błędu więc byłabym wdzięczna, gdybyście mieli > jakieś pomysły jak go znaleźć. Picklowanie jakiego obiektu może wywołać > taki error? Zobacz co wrzucasz do multiprocessing.Queue, którego prawdopodobnie używasz do wymiany danych między wątkami. A na przyszłość: > File "/usr/lib/python2.6/multiprocessing/queues.py", line 242, in _feed bierzesz na warsztat powyższy plik (nie musisz mieć źródeł bibliotek na dysku, możesz go wygooglać) i przechodzisz do linii 242. Następnie jedziesz w górę i patrzysz do jakiej funkcji/metody/klasy ta linia należy (tutaj: multiprocessing.Queue), a dalej już z górki. Pozdrawiam Beorn -- Daniel 'Beorn' Mróz <beorn@alpha.pl> http://127.0.0.1/beorn [GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---] [O- M- V! PS+ PE++ Y+ PGP++ t- 5 X R !tv b+ DI D++ G++ e h*] [ r++ y+ ]
Re: Runtime error bez pełnego trace'a?
Author: królewna
Date: Fri, 19 Feb 2010 12:26
Date: Fri, 19 Feb 2010 12:26
12 lines
1293 bytes
1293 bytes
Sprawdziłam tak jak mówiłeś i w kodzie ta linijka jest w funkcji wykorzystywanej tylko w konstruktorze. Mój konstruktor kolejki wygląda następująco: threads_qout[w.name] = Queue.Queue() gdzie "w" jest obiektem typu threading.Thread. Nie za bardzo wiem gdzie się tu może objawiać błąd. -- Pozdrawiam, królewna
Re: Runtime error bez pełnego trace'a?
Author: Daniel Mróz
Date: Fri, 19 Feb 2010 14:35
Date: Fri, 19 Feb 2010 14:35
32 lines
2259 bytes
2259 bytes
On 19.02.2010, królewna <krolewna@ee.pl> wrote: > Sprawdziłam tak jak mówiłeś i w kodzie ta linijka jest w funkcji > wykorzystywanej tylko w konstruktorze. Mój konstruktor kolejki wygląda > następująco: > > threads_qout[w.name] = Queue.Queue() Queue.Queue != multiprocessing.Queue > gdzie "w" jest obiektem typu threading.Thread. Nie za bardzo wiem gdzie > się tu może objawiać błąd. Problem nie jest przy przypisaniu obiektu kolejki do zmiennej lecz przy wrzucaniu do tej kolejki czegoś. 1. Sprawdź gdzie inicjujesz kolejkę multiprocessing.Queue. 2. Sprawdź jakie obiekty do niej wrzucasz. 3. Sprawdź te obiekty czy przypadkiem nie zawierają jakichś locków. Ogólnie, trzeba bardzo uważać co się przesyła poprzez kolejkę. Jakiś obiekt, który zawiera inny "obcy" obiekt może narobić szkód jeśli nie wiemy co ten "obcy" obiekt w sobie ma lub może mieć. najlepiej nie kombinować, tylko wrzucać typy proste do jakiejś klasy używanej tylko do enkapsulacji danych przesyłanych przez kolejkę (klasa - kontener) i takie obiekty wpychać do Queue. Pozdrawiam Beorn -- Daniel 'Beorn' Mróz <beorn@alpha.pl> http://127.0.0.1/beorn [GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---] [O- M- V! PS+ PE++ Y+ PGP++ t- 5 X R !tv b+ DI D++ G++ e h*] [ r++ y+ ]
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