[prev in list] [next in list] [prev in thread] [next in thread]
List: python-list
Subject: Re: multiprocess passing arguments double asterisks
From: ricemom () gmail ! com
Date: 2016-10-27 15:14:36
Message-ID: 3b52cc7c-cc99-4efd-8413-19d9cc8f1a3a () googlegroups ! com
[Download RAW message or body]
On Wednesday, October 26, 2016 at 5:31:18 PM UTC-5, MRAB wrote:
> On 2016-10-26 21:44, pic8690@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, pic8690@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.
--if the dict has numpy arrays it fails..
In the above example if
kwargs={'name':'special','a':2}
val=parallelize(bar_wrapper,kwargs.items()) it works fine
But if
kwargs={'name':'special','a':a1d,'b':b1d}
it fails (a1d & b1d are numpy arrays)
--
https://mail.python.org/mailman/listinfo/python-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic