Thread View: pl.comp.lang.python
10 messages
10 total messages
Started by królewna
Mon, 21 Dec 2009 15:06
Multiprocessing i timeout
Author: królewna
Date: Mon, 21 Dec 2009 15:06
Date: Mon, 21 Dec 2009 15:06
19 lines
1953 bytes
1953 bytes
Czy jest jakaś możliwość aby multiprocessing.connection.Client podczas tworzenia połączenia miał podawany parametr działający na zasadzie timeout? Bo obecnie próbując połączyć się z niedziałającym procesem, proces, który wywołuje funkcje klienta czeka w nieskończoność. Czy będę musiała przepisać część kodu z biblioteki po swojemu? Bo z tego co widzę to klasa Client jest tak naprawdę tylko wrapperem, który wywołuje odpowiednią klasę dla argumentu o odpowiednim rodzaju(mi chodzi o obiekty typu socket) i nie za bardzo sama ma jakieś inne pola. Czy może zastosować lepiej jakieś inne rozwiązania do komunikacji między dwoma programami? Bo różnicy pomiędzy normalnymi socketami z picklowaniem a multiprocessing.connection nie widzę (jedynie co zaobserwowałam to to, że przesyłanie przez multiprocessing.connection jest szybsze) i właściwie do tej pory stosowałam je wymiennie (ze względu na łatwość wysyłania i odbierania obiektów przez connection). Czym także różnią się oba sposoby jeśli chcę po prostu wysyłać obiekty między dwoma obiektami? Czym te dwa sposoby różnią się od BaseManager przy takiej samej sytuacji?
Re: Multiprocessing i timeout
Author: Bart Ogryczak
Date: Mon, 21 Dec 2009 15:35
Date: Mon, 21 Dec 2009 15:35
8 lines
1568 bytes
1568 bytes
On Dec 21, 4:06 pm, królewna <krole...@ee.pl> wrote: > Czy jest jakaś możliwość aby multiprocessing.connection.Client podczas > tworzenia połączenia miał podawany parametr działający na zasadzie > timeout? Może klasycznie uniksowe rozwiązanie: http://www.python.org/doc/2.6.4/library/signal.html#example
Re: Multiprocessing i timeout
Author: Łukasz Rekucki
Date: Mon, 21 Dec 2009 16:30
Date: Mon, 21 Dec 2009 16:30
16 lines
2037 bytes
2037 bytes
On Dec 21, 4:35 pm, Bart Ogryczak <b.ogryc...@gmail.com> wrote: > On Dec 21, 4:06 pm, królewna <krole...@ee.pl> wrote: > > > Czy jest jakaś możliwość aby multiprocessing.connection.Client podczas > > tworzenia połączenia miał podawany parametr działający na zasadzie > > timeout? > > Może klasycznie uniksowe rozwiązanie: > > http://www.python.org/doc/2.6.4/library/signal.html#example Jak widać nie pomyśleli o tym, ale można użyć http://docs.python.org/library/socket.html#socket.setdefaulttimeout tuż przed wywołaniem Client(). Powinno to ustawić timeout na sockecie, który stworzy SocketClient(). PipeClient() wydaje się mieć ustawiony na sztywno timeout 1000ms.
Re: Multiprocessing i timeout
Author: królewna
Date: Tue, 22 Dec 2009 09:24
Date: Tue, 22 Dec 2009 09:24
15 lines
1708 bytes
1708 bytes
W dniu 21.12.2009 17:30, Łukasz Rekucki pisze: > Jak widać nie pomyśleli o tym, ale można użyć > http://docs.python.org/library/socket.html#socket.setdefaulttimeout > tuż przed wywołaniem Client(). Powinno to ustawić timeout na sockecie, > który stworzy SocketClient(). PipeClient() wydaje się mieć ustawiony > na sztywno timeout 1000ms. Przyznam, że nie rozumiem w jaki sposób to działa. Tworzę nowy obiekt klasy socket zupełnie nie związany z obiektem klasy Client, zmieniam na nim timeout i to działa na obiekcie Clienta. Jaka jest zasada działania tego? Czyli jak zmienię na jednym obiekcie klasy socket np timeout to ten timeout zmienia się na wszystkich? królewna
Re: Multiprocessing i timeout
Author: Bart Ogryczak
Date: Tue, 22 Dec 2009 09:29
Date: Tue, 22 Dec 2009 09:29
25 lines
2527 bytes
2527 bytes
On Dec 22, 10:24 am, królewna <krole...@ee.pl> wrote: > W dniu 21.12.2009 17:30, Łukasz Rekucki pisze: > > > Jak widać nie pomyśleli o tym, ale można użyć > >http://docs.python.org/library/socket.html#socket.setdefaulttimeout > > tuż przed wywołaniem Client(). Powinno to ustawić timeout na sockecie, > > który stworzy SocketClient(). PipeClient() wydaje się mieć ustawiony > > na sztywno timeout 1000ms. > > Przyznam, że nie rozumiem w jaki sposób to działa. Tworzę nowy obiekt > klasy socket zupełnie nie związany z obiektem klasy Client, zmieniam na > nim timeout i to działa na obiekcie Clienta. Jaka jest zasada działania > tego? Czyli jak zmienię na jednym obiekcie klasy socket np timeout to > ten timeout zmienia się na wszystkich? Nie. Importujesz moduł socket. Zmieniasz domyślny timeout. Wszystkie sockety utworzone po tej zmianie będą miały taki timeout. Np. import socket socket.setdefaulttimeout(twój_timeout) ... klient = multiprocessing.connection.Client() # ten klient będzie miał twój timeout.
Re: Multiprocessing i timeout
Author: królewna
Date: Tue, 22 Dec 2009 09:46
Date: Tue, 22 Dec 2009 09:46
18 lines
1696 bytes
1696 bytes
W dniu 22.12.2009 10:29, Bart Ogryczak pisze: > > Nie. Importujesz moduł socket. Zmieniasz domyślny timeout. Wszystkie > sockety utworzone po tej zmianie będą miały taki timeout. > Np. > > import socket > socket.setdefaulttimeout(twój_timeout) > ... > > klient = multiprocessing.connection.Client() # ten klient będzie miał > twój timeout. Oh, przepraszam. Byłam prawie pewna, że właśnie zrobiłam tak jak napisałam i zadziałało więc mnie to zdziwiło. Ale najwidoczniej napisałam tak jak radziłeś bo teraz sprawdzam i rzeczywiście działa tak jak opisujesz.
Re: Multiprocessing i timeout
Author: William Bonawentura
Date: Wed, 23 Dec 2009 07:12
Date: Wed, 23 Dec 2009 07:12
8 lines
1439 bytes
1439 bytes
Użytkownik "Łukasz Rekucki" <lrekucki@gmail.com> napisał w wiadomości news:5e45a27a-4515-40c1-b098-f5f2724be64c@r24g2000yqd.googlegroups.com... > Jak widać nie pomyśleli o tym, ale można użyć > http://docs.python.org/library/socket.html#socket.setdefaulttimeout Z zastrzeżeniem, że to jest zmiana globalna - na wszystkie wątki.
Re: Multiprocessing i timeout
Author: Daniel Mróz
Date: Sat, 26 Dec 2009 17:17
Date: Sat, 26 Dec 2009 17:17
45 lines
2426 bytes
2426 bytes
On 23.12.2009, William Bonawentura <news@ipartners.pl> wrote:
>> Jak widać nie pomyśleli o tym, ale można użyć
>> http://docs.python.org/library/socket.html#socket.setdefaulttimeout
> Z zastrzeżeniem, że to jest zmiana globalna - na wszystkie wątki.
Dlatego najlepiej timeouty implementować na select.select lub select.*Poll,
np. (piszę z pamięci, więc może nie działać, ale ogólną zasadę Królewna
wyczai):
sock = socket.socket(<co tam potrzeba>)
sock.setblocking(0)
poller = select.poll()
poller.register(sock.fileno(), select.POLLOUT)
try:
sock.connect(<co tam potrzeba>)
except socket.error, e:
if e.args[0] not in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK):
sock.close()
raise
else:
pass
except:
sock.close()
raise
events = poller.poll(<wybrany timeout>)
if not events:
sock.close()
raise JakiśTamWyjątek('Connect timeout')
sock.setblocking(1)
W Pythonie 3.0 już są AFAIR timeouty per obiekt gniazda, a nie
globalne, ale nie pamiętam czy obejmowały one przekroczenia czasu
połączenia, czy tylko timout transferu danych.
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: Multiprocessing i timeout
Author: William Bonawentura
Date: Wed, 30 Dec 2009 07:01
Date: Wed, 30 Dec 2009 07:01
9 lines
1408 bytes
1408 bytes
Użytkownik "Daniel Mróz" <beorn@alpha.pl> napisał w wiadomości news:slrnhjchh0.h9g.beorn@pino.cyberdeck.pl... > > > W Pythonie 3.0 już są AFAIR timeouty per obiekt gniazda, a nie > globalne, ale nie pamiętam czy obejmowały one przekroczenia czasu Są i w 2.6
Re: Multiprocessing i timeout
Author: Łukasz Rekucki
Date: Wed, 30 Dec 2009 14:44
Date: Wed, 30 Dec 2009 14:44
23 lines
2472 bytes
2472 bytes
On Dec 30, 8:01 am, "William Bonawentura" <n...@ipartners.pl> wrote: > Użytkownik "Daniel Mróz" <be...@alpha.pl> napisał w wiadomościnews:slrnhjchh0.h9g.beorn@pino.cyberdeck.pl... > > > > > W Pythonie 3.0 już są AFAIR timeouty per obiekt gniazda, a nie > > globalne, ale nie pamiętam czy obejmowały one przekroczenia czasu > > Są i w 2.6 W każdej wersji gdzie jest setsockopt()! Ale w ogóle nie o to tu chodziło. Problem był taki, że konstruktor klasy http://docs.python.org/library/multiprocessing.html#multiprocessing.connection.Client , który wewnętrznie tworzy sobie socket do którego nie masz dostępu, nie przyjmuję takiej opcji. >> Jak widać nie pomyśleli o tym, ale można użyć >> http://docs.python.org/library/socket.html#socket.setdefaulttimeout > Z zastrzeżeniem, że to jest zmiana globalna - na wszystkie wątki. W kontekście multiprocessing, jakoś bym się tym nie martwił ;), ale tak - należy o tym pamiętać
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