[execnet-dev] Sub-processes PyPy
Ronny Pfannschmidt
opensource at ronnypfannschmidt.de
Tue Nov 17 04:34:30 EST 2015
I believe there is a bug in the sanity check when inner functions are passed inside a remote function
We should fix that
Am 17. November 2015 10:12:04 MEZ, schrieb holger krekel <holger at merlinux.eu>:
>On Mon, Nov 16, 2015 at 16:56 -0500, Luis José Novoa wrote:
>> Thanks again for the kind reply. After going through the
>multichannels
>> examples I have this toy example:
>>
>> def summi(p):
>> return p**2
>>
>>
>> def multiplier(channel, factor1, factor2, factor3):
>> while not channel.isclosed():
>> param = channel.receive()
>> r = summi(p=param)
>> channel.send(factor1 * factor2 + factor3 + r)
>>
>> if __name__ == "__main__":
>>
>> factor11 = 20
>> factor12 = 10
>> factor13 = 200
>>
>> factor21 = 5
>> factor22 = 5
>> factor23 = 200
>>
>>
>> gw = execnet.makegateway()
>> channel1 = gw.remote_exec(multiplier, factor1=factor11,
>> factor2=factor12, factor3=factor13)
>> channel1.send(1)
>> gw2 = execnet.makegateway()
>> channel2 = gw2.remote_exec(multiplier, factor1=factor21,
>> factor2=factor22, factor3=factor23)
>> channel2.send(1)
>> mch = execnet.MultiChannel([channel1, channel2])
>> queue = mch.make_receive_queue()
>> results = []
>> for i in range(2):
>> results.append(queue.get())
>> print results
>>
>>
>> Now, when running it I get the following error:
>>
>> ValueError: ("the use of non-builtin globals isn't supported",
>['summi']).
>>
>> I tried the following:
>>
>> def multiplier(channel, factor1, factor2, factor3):
>> def summi(p):
>> return p**2
>> while not channel.isclosed():
>> param = channel.receive()
>> r = summi(p=param)
>> channel.send(factor1 * factor2 + factor3 + r)
>>
>>
>> and with this change I got:
>>
>> ValueError: ("the use of non-builtin globals isn't supported", ['p',
>'p'])
>
>You need to send a module rather than just a function if your
>function depends on another function in that module.
>execnet only sends the source of the function, otherwise.
>See here also:
>
>http://codespeak.net/execnet/example/test_info.html#remote-exec-a-module-avoiding-inlined-source-part-ii
>
>cheers,
>holger
>
>
>>
>>
>> I am just trying to understand the nature of the errors reported, and
>> possibly find a way around it. The function calls that I want to
>> parallelize invoke other functions from within, just as in the toy
>example.
>>
>>
>>
>> Any clarification is much appreciated.
>>
>> Thank you in advance.
>>
>> Luis.
>>
>>
>>
>>
>>
>> On Thu, Nov 12, 2015 at 6:50 AM, holger krekel <holger at merlinux.eu>
>wrote:
>>
>> > On Tue, Nov 10, 2015 at 12:46 -0500, Luis José Novoa wrote:
>> > > Thanks for your reply. I was trying to replicate one of the
>execnet
>> > > examples available online and had problems using PyPy due to
>pydev (using
>> > > aptana under windows). But now it works. Thanks.
>> > >
>> > > Now, this is the kind of procedure that I am trying to replicate
>(which
>> > > currently uses the multiprocessing module and uses CPython to
>solve the
>> > > subproblems in parallel):
>> > >
>> > > out = mp.Queue()
>> > > subproblems = [mp.Process(target=MyFunction, args=(s, a, b, c, d,
>out))
>> > for
>> > > s in range(len(networks))]
>> > >
>> > > *# Run subproblems*
>> > > for sb in subproblems:
>> > > sb.start()
>> > >
>> > > *# Get results from the out queue*
>> > > results = [out.get() for sb in subproblems]
>> >
>> > did you look into the multi-channel examples?
>> >
>> > http://codespeak.net/execnet/example/test_multi.html
>> >
>> > you can start a pypy subprocess like so:
>> >
>> > execnet.makegateway("popen//python=pypy")
>> >
>> > and that should work if used in the multichannel examples.
>> >
>> > holger
>> >
>> >
>> > >
>> > > So, what I would like to do, is to solve the subproblems with
>PyPy, as
>> > they
>> > > are time consuming. I would like to do this using execnet, but I
>still
>> > > haven't been able to get my head around it (Im clearly not even
>close to
>> > an
>> > > expert in these matters). I wonder if anyone can point me in the
>right
>> > > direction, maybe through an example, on how to do this.
>> > >
>> > > Thanks very much in advance. I apologize for any inconvenience
>this may
>> > > cause.
>> > >
>> > > On Sat, Nov 7, 2015 at 10:02 AM, Maciej Fijalkowski
><fijall at gmail.com>
>> > > wrote:
>> > >
>> > > > Hi Luis
>> > > >
>> > > > Things should work on pypy without any problem whatsoever, just
>like
>> > > > with normal python.
>> > > >
>> > > > Cheers,
>> > > > fijal
>> > > >
>> > > > On Thu, Nov 5, 2015 at 4:36 PM, Luis José Novoa <
>> > luisjosenovoa at gmail.com>
>> > > > wrote:
>> > > > > Hi Everyone,
>> > > > >
>> > > > > As part of a large scale optimization application, I am using
>the
>> > python
>> > > > > multiprocessing module to execute a procedure several times
>in
>> > parallel.
>> > > > > These executions in turn, return results used by other
>procedure,
>> > and the
>> > > > > whole thing repeats iteratively. I would like to call PyPy
>only for
>> > the
>> > > > > subprocesses (to improve performance), as in the main
>procedure I use
>> > > > > libraries like gurobipy, which are not compatible with PyPy.
>I
>> > looked at
>> > > > the
>> > > > > documentation of execnet online, but I could not find
>examples for
>> > > > > communication between CPython and PyPy.
>> > > > >
>> > > > > Any suggestions for using CPython + Multiprocessing with PyPy
>would
>> > be
>> > > > > highly appreciated.
>> > > > >
>> > > > > Have a great day.
>> > > > >
>> > > > > --
>> > > > > Luis J. Novoa
>> > > > >
>> > > > > _______________________________________________
>> > > > > execnet-dev mailing list
>> > > > > execnet-dev at python.org
>> > > > > https://mail.python.org/mailman/listinfo/execnet-dev
>> > > > >
>> > > >
>> > >
>> > >
>> > >
>> > > --
>> > > Luis J. Novoa
>> >
>> > > _______________________________________________
>> > > execnet-dev mailing list
>> > > execnet-dev at python.org
>> > > https://mail.python.org/mailman/listinfo/execnet-dev
>> >
>> >
>> > --
>> > about me: http://holgerkrekel.net/about-me/
>> > contracting: http://merlinux.eu
>> >
>>
>>
>>
>> --
>> Luis J. Novoa
>
>--
>about me: http://holgerkrekel.net/about-me/
>contracting: http://merlinux.eu
>_______________________________________________
>execnet-dev mailing list
>execnet-dev at python.org
>https://mail.python.org/mailman/listinfo/execnet-dev
--
Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/execnet-dev/attachments/20151117/44a95aec/attachment.html>
More information about the execnet-dev
mailing list