Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

passing a socket to a subprocess in windows

6 views
Skip to first unread message

Daniel Platz

unread,
Mar 16, 2010, 1:10:16 PM3/16/10
to
Hello!

I have a problem with passing a socket to a subprocess in windows. It
works in Linux and for windows there is a workaround in the Python
doc. However, this workaround does not work. It was already noted by
other people and they Python issue tracker

http://bugs.python.org/issue5879
***************************************************************************************************************
the example from

http://docs.python.org/library/multiprocessing.html?highlight=multiprocessing#module-multiprocessing

named "
# Example where a pool of http servers share a single listening socket
#
"
does not work on windows.

Reason:

s = socket.fromfd(fd, family, type_, proto)

in line 156 of reduction.py

fails, because fromfd is not available on windows. Sad thing:
reduction.py was put into processing.py exactly to solve that problem
(i.e. reduction.py is provided as workaround for socket.fromfd not
available on windows, from the documentation:
if sys.platform == 'win32':
import multiprocessing.reduction
# make sockets pickable/inheritable


the solution within processing was:

try:
fromfd = socket.fromfd
except AttributeError:
def fromfd(fd, family, type, proto=0):
s = socket._socket.socket()
_processing.changeFd(s, fd, family, type, proto)
return s

but: _multiprocessing has no longer a method changeFd.

Harald
***********************************************************************************************************************

Has someone information about this or can help me to solve the
problem.

Thanks in advance

Daniel

Gabriel Genellina

unread,
Mar 16, 2010, 6:39:04 PM3/16/10
to pytho...@python.org
En Tue, 16 Mar 2010 14:10:16 -0300, Daniel Platz
<mail.to.da...@googlemail.com> escribi�:

> I have a problem with passing a socket to a subprocess in windows. It
> works in Linux and for windows there is a workaround in the Python
> doc. However, this workaround does not work. It was already noted by
> other people and they Python issue tracker
>
> http://bugs.python.org/issue5879

Unfortunately I cannot test it at this moment, but around line 360 in
socketmodule.c:

#if defined(MS_WINDOWS) || defined(__BEOS__)
...
#define NO_DUP /* Actually it exists on NT 3.5, but what the heck... */
#endif

you could try removing that #define NO_DUP and recompiling. socket.fromfd
should appear, and hopefully socket objects can now be sent thru the
multiprocessing connection.

(I cannot see how the example could have actually worked on Windows, maybe
I'm missing something. Perhaps http://bugs.python.org/issue3125 broke
this.)

--
Gabriel Genellina

0 new messages