![]() |
Re: Passing functions as parameter (multiprocessing)
On 2012-11-13 12:19, Jean-Michel Pichavant wrote:
> Fellows, > > I'm having problems understanding an issue with passing function as parameters. > > I'm sending some functions to the multiprocessing module (python 2.5 with the proper backport). > I'm iterating on a list of functions, however it seems that only the last function implementation is used for > all the subprocesses. > > Here's a code that triggers the issue: > > > import multiprocessing > > def f1(): > print 'I am f1' > def f2(foo): > print 'I am f2 %s' % foo > > workers = [ > (f1,tuple()), > (f2,(5,)), > ] > > procs=[] > for func, parameters in workers: > # here it should be decorated, but for this example to be kept simple, the function is only wrapped, doing nothing special > def subproc(*args, **kwargs): > return func(*args, **kwargs) > procs.append(multiprocessing.Process(target=subpro c, args=parameters)) > > for proc in procs: > proc.start() > for proc in procs: > proc.join() > > > Here's the result: >> run test.py > Process Process-1: > Traceback (most recent call last): > File "/usr/lib/python2.5/site-packages/multiprocessing-2.6.2.1-py2.5-linux-i686.egg/multiprocessing/process.py", line 237, in _bootstrap > self.run() > File "/usr/lib/python2.5/site-packages/multiprocessing-2.6.2.1-py2.5-linux-i686.egg/multiprocessing/process.py", line 93, in run > self._target(*self._args, **self._kwargs) > File "test.py", line 17, in subproc > return func(*args, **kwargs) > TypeError: f2() takes exactly 1 argument (0 given) > I am f2 5 > > It looks like the first subprocess is called with f2 instead of f1. > I believe the problem is that 'subproc' calls 'func', which is rebound on the each iteration. |
| All times are GMT. The time now is 12:48 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.