代码之家  ›  专栏  ›  技术社区  ›  suvayu

如何组合延迟函数调用的顺序执行和并行执行?

  •  0
  • suvayu  · 技术社区  · 7 年前

    我被困在一个陌生的地方。我有一堆延迟的函数调用,我想按一定的顺序执行。虽然并行执行很简单:

    res = client.compute([myfuncs])
    res = client.gather(res)
    

    我似乎找不到一种以非阻塞方式按顺序执行它们的方法。

    下面是一个最小的例子:

    import numpy as np
    from time import sleep
    from datetime import datetime
    
    from dask import delayed
    from dask.distributed import LocalCluster, Client
    
    
    @delayed
    def dosomething(name):
        res = {"name": name, "beg": datetime.now()}
        sleep(np.random.randint(10))
        res.update(rand=np.random.rand())
        res.update(end=datetime.now())
        return res
    
    
    seq1 = [dosomething(name) for name in ["foo", "bar", "baz"]]
    par1 = dosomething("whaat")
    par2 = dosomething("ahem")
    pipeline = [seq1, par1, par2]
    

    在上面的例子中,我想运行 seq1 , par1 和 par2 平行的,但是 SEQ1 依次为“foo”、“bar”和“baz”。

    1 回复  |  直到 7 年前
        1
  •  1
  •   mdurant    7 年前

    @dask.delayed
    def dosomething(name, *args):
         ...
    

    inputs = ["foo", "bar", "baz"]
    seq1 = [dosomething(inputs[0])]
    for bit in inputs[1:]:
        seq1.append(dosomething(bit, seq1[-1]))