Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ipython并行计算中的异步计算_Python_Parallel Processing_Ipython_Ipython Parallel - Fatal编程技术网

ipython并行计算中的异步计算

ipython并行计算中的异步计算,python,parallel-processing,ipython,ipython-parallel,Python,Parallel Processing,Ipython,Ipython Parallel,自从令人敬畏的1.0.0发布以来,我一直在玩iPython并行接口。我要做的是建立一个异步随机梯度下降系统。在我看来,我想向所有节点发送一个函数,并在它们出来时得到结果。从我能够实现的内容和文档中的一瞥来看,实现的标准视图并不真正支持这一点。get(timeout)方法可以做到这一点,但您不能使用timeout来真正遍历对象中的每个条目。我设法让它运行的方法如下 c = Client() calls = [] for i,j in enumerate(args): calls.appen

自从令人敬畏的
1.0.0
发布以来,我一直在玩
iPython
并行接口。我要做的是建立一个异步随机梯度下降系统。在我看来,我想向所有节点发送一个函数,并在它们出来时得到结果。从我能够实现的内容和文档中的一瞥来看,实现的标准视图并不真正支持这一点。
get(timeout)
方法可以做到这一点,但您不能使用timeout来真正遍历
对象中的每个条目。我设法让它运行的方法如下

c = Client()
calls = []
for i,j in enumerate(args):
    calls.append( c[ i % len( c.ids ) ].apply( f, j ) )

while condition:
    dels = []
    for i,j in enumerate( calls ):
         try:
             print j.get(0.01) #or some other timeout
             dels.append( i ) #I keep track of the calls that have been called
             #do something with the last result, throw a new call
             calls.append( c[ i % len(c.ids) ].apply( f, argument )
         except:
             pass

    for i,d in enumerate( dels ):
         del calls[ d - i ] #delete gotten calls

    #evaluate stopping condition

现在,在你们尖叫这是一个可怕的代码和愚蠢的方式之前,我知道这一点。我可以让这种特殊的方式做得更好,但我只是想知道在IPython.parallel中是否有一些内置的方式来做类似的事情

提前感谢任何花时间的人

最好的,
Al.

您可以创建多个异步调用,然后对它们进行迭代

c = Client()
dview = c[:]
asyncs = [dview.map_async(f, [arg]) for arg in args]
while asyncs:
    for async in asyncs[:]:
        if async.ready():
            asyncs.remove(async)
            print async.result[0]

当您有一个等待所有任务完成的while循环时,异步执行有什么意义?您刚刚在async API上实现了一个同步执行:)True,但最终我想实现一个循环,不断抛出新调用,并在它们出现时获取它们。我将在示例中对此进行更新。我的目标是为神经网络实现一个同步sgd。因此,调用可能与当前参数有些不同步。我会一直给他们打电话,直到误差变化小于移动平均线之类的某个数值。该死的,维克多,你真的很快就拿到了ipython的标签!谢谢!