On 2016-10-26 21:44, pic8...@gmail.com wrote:
On Monday, October 24, 2016 at 12:39:47 PM UTC-5, Thomas Nyberg wrote:
On 10/24/2016 12:45 PM, pic8...@gmail.com wrote:
> Thanks for the reply.
>
> The code snippet given by Peter is not very clear
>
> I would like to multiprocess a function which is written in python of the
form bar(**kwargs) which returns a value. This example does not return anything
>
> Would you please use my example for the map function?
>
> I appreciate your help,
>
I'm honestly not totally sure what you want to do. However, say you want
to do the following (btw this is basically what Dennis said i nhis last
email, but maybe I can help clarify):
kwargs = {'param1': val1, 'param2': val2})
Then you'd like to have the following two operations performed in
separate processes:
bar(param1=val1)
bar(param2=val2)
In that case, I guess I would do something like the following. First
define bar_wrapper as follows (*I haven't tested any code here!):
def bar_wrapper(pair):
key, val = pair
return bar(**{key: val})
Then I would probably do something like
map(bar_wrapper, kwargs.items())
I.e. basically what I'm doing is taking the key-val pairs and producing
a list of them (as tuples). This is something that you can apply map
too, but not with the original function. So then the wrapper function
converts the tuple back to what you want originally.
Hopefully I'm understanding correctly and hopefully this helps.
Cheers,
Thomas
Thomas,
I have strings & numpy.ndarray as arguments. The wrapper function works great
for strings.
Here's what I'm trying to do...
**************************
I have a serial python fn of the form
def bar(**kwargs):
a=kwargs.get("name")
print a
self.a1d=ma.asanyarray(kwargs.get('a1d'), dtype=float)
(****more calculations--takes a long time to compute
returns an object)
I am trying to run this function in parallel.
Here's my Main program
import numpy as np
import numpy.ma as ma
from delegate import parallelize
from hashlib import sha1
a1d=np.zeros((32))
b1d=np.zeros((32))
p=open("/tmp/pdata","rb")
pdata=np.load(p)
for i in range(0,10):
a1d=pdata['t1d']
b1d=pdata['gz1d']
print a1d,b1d
kwargs={'name':'special','a':a1d,'b':b1d}
val=parallelize(bar,kwargs)
***************************************
Error:
line 30, in <module>
val=parallelize(bar,kwargs)
delegate.py", line 311, in process
item, items = items[0], items[1:]
KeyError: 0
**************************************
Error: (with the wrapper function)
val=parallelize(bar_wrapper,kwargs.items())
TypeError: unhashable type: 'numpy.ndarray'
***************************************
How do I pass the string & numpy.ndarray to the function bar(**kwargs)?
Thank you for suggestions & help,
a1d=np.zeros((32))
b1d=np.zeros((32))
p=open("/tmp/pdata","rb")
pdata=np.load(p)
for i in range(0,100):
a1d=pdata['t1d']
b1d=pdata['gz1d']
print a1d,b1d
kwargs={'name':'special','a':a1d,'b':b1d}
val=parallelize(bar,kwargs)
'parallelize' expects a function and a list of items. It calls the
function with each item in the list in parallel, passing the item as the
argument of the function.
That _single_ argument item can be a tuple or a dict.
--
https://mail.python.org/mailman/listinfo/python-list