🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#27299
Author: królewna
Date: Thu, 18 Feb 2010 15:33
18 lines
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?
#27300
Author: Bart Ogryczak
Date: Thu, 18 Feb 2010 16:05
18 lines
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?
#27301
Author: Daniel Mróz
Date: Fri, 19 Feb 2010 02:41
40 lines
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?
#27302
Author: królewna
Date: Fri, 19 Feb 2010 12:26
12 lines
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?
#27303
Author: Daniel Mróz
Date: Fri, 19 Feb 2010 14:35
32 lines
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