S
Sebastien Binet
hi there,
say I have this module
## farnsworth ##
__all__ = [
'mgr',
'maths',
]
from multiprocessing.managers import BaseManager
class MathsClass(object):
def add(self, x, y):
return x + y
def mul(self, x, y):
return x * y
class MyManager(BaseManager):
pass
MyManager.register('Maths', MathsClass)
def _setup():
print "creating a manager..."
mgr = MyManager()
print "starting the manager..."
mgr.start()
print "sciencing faster..."
maths = mgr.Maths()
print maths.add(4,3)
print maths.mul(7,8)
print "done with sciencing."
return (mgr, maths)
# exec at module import
mgr, maths = _setup()
# prevent hysteresis + clean-up
del _setup
## EOF ##
if I use it like so:
$ python -m farnsworth
creating a manager...
starting the manager...
sciencing faster...
7
56
done with sciencing.
all is fine, but if I try to use it thru an import:
$ python
py> import farnsworth.mgr as mgr
creating a manager...
starting the manager...
sciencing faster...
[stuck for some time... hitting ^C]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "farnsworth.py", line 32, in <module>
mgr, maths = _setup()
File "farnsworth.py", line 25, in _setup
maths = mgr.Maths()
File "/usr/lib/python2.6/multiprocessing/managers.py", line 634, in
temp
token, exp = self._create(typeid, *args, **kwds)
File "/usr/lib/python2.6/multiprocessing/managers.py", line 532, in
_create
conn = self._Client(self._address, authkey=self._authkey)
File "/usr/lib/python2.6/multiprocessing/connection.py", line 140,
in Client
answer_challenge(c, authkey)
File "/usr/lib/python2.6/multiprocessing/connection.py", line 372,
in answer_challenge
message = connection.recv_bytes(256) # reject large
message
KeyboardInterrupt
is this a known limitation/feature of the multiprocessing module ?
is there a workaround (acquiring some import lock maybe) ?
cheers,
sebastien.
PS:
$ python
Python 2.6.4 (r264:75706, Oct 27 2009, 06:25:13)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
$ python -c 'import sys; print sys.version_info'
(2, 6, 4, 'final', 0)
$ uname -a
Linux farnsworth 2.6.31-ARCH #1 SMP PREEMPT Tue Nov 10 19:01:40 CET
2009 x86_64 Intel(R) Core(TM)2 Duo CPU T9400 @ 2.53GHz GenuineIntel
GNU/Linux
say I have this module
## farnsworth ##
__all__ = [
'mgr',
'maths',
]
from multiprocessing.managers import BaseManager
class MathsClass(object):
def add(self, x, y):
return x + y
def mul(self, x, y):
return x * y
class MyManager(BaseManager):
pass
MyManager.register('Maths', MathsClass)
def _setup():
print "creating a manager..."
mgr = MyManager()
print "starting the manager..."
mgr.start()
print "sciencing faster..."
maths = mgr.Maths()
print maths.add(4,3)
print maths.mul(7,8)
print "done with sciencing."
return (mgr, maths)
# exec at module import
mgr, maths = _setup()
# prevent hysteresis + clean-up
del _setup
## EOF ##
if I use it like so:
$ python -m farnsworth
creating a manager...
starting the manager...
sciencing faster...
7
56
done with sciencing.
all is fine, but if I try to use it thru an import:
$ python
py> import farnsworth.mgr as mgr
creating a manager...
starting the manager...
sciencing faster...
[stuck for some time... hitting ^C]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "farnsworth.py", line 32, in <module>
mgr, maths = _setup()
File "farnsworth.py", line 25, in _setup
maths = mgr.Maths()
File "/usr/lib/python2.6/multiprocessing/managers.py", line 634, in
temp
token, exp = self._create(typeid, *args, **kwds)
File "/usr/lib/python2.6/multiprocessing/managers.py", line 532, in
_create
conn = self._Client(self._address, authkey=self._authkey)
File "/usr/lib/python2.6/multiprocessing/connection.py", line 140,
in Client
answer_challenge(c, authkey)
File "/usr/lib/python2.6/multiprocessing/connection.py", line 372,
in answer_challenge
message = connection.recv_bytes(256) # reject large
message
KeyboardInterrupt
is this a known limitation/feature of the multiprocessing module ?
is there a workaround (acquiring some import lock maybe) ?
cheers,
sebastien.
PS:
$ python
Python 2.6.4 (r264:75706, Oct 27 2009, 06:25:13)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
$ python -c 'import sys; print sys.version_info'
(2, 6, 4, 'final', 0)
$ uname -a
Linux farnsworth 2.6.31-ARCH #1 SMP PREEMPT Tue Nov 10 19:01:40 CET
2009 x86_64 Intel(R) Core(TM)2 Duo CPU T9400 @ 2.53GHz GenuineIntel
GNU/Linux