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
> 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