首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ipython并行中的异步计算

ipython并行中的异步计算
EN

Stack Overflow用户
提问于 2013-09-09 11:05:52
回答 1查看 397关注 0票数 0

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

代码语言:javascript
复制
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中是否有一些内置的方法来做类似的事情。

提前感谢大家抽出时间来。

最好,艾尔。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-09 12:16:32

您可以创建多个异步调用,然后遍历它们。

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18696828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档