0

在我为 ipython 找到的所有示例中:

似乎在使用负载平衡视图块时设置为 False。

我想知道为什么?

另外,是否可以将其设置为 True 以及这会产生什么影响?

我知道这可能是一个基本问题,但作为新手,我找不到令人满意的答案。

感谢帮助

4

1 回答 1

0

看到事情是阻塞和非阻塞只不过是两种不同的方式来获得你的输出 - >

  1. 要么您希望最后输出所有命令,以便处理器将用于执行算法命令而不是产生输出,因为该处理器需要阻塞其他命令,这种模式称为阻塞模式,我们有设置 directViewName.block=TRUE

  2. 或者您希望在为此生成输出后立即获得输出,您需要指定它不应阻塞命令的处理器,即 directViewName.block=FALSE 并且此模式是非阻塞模式。

现在,如果您将 directViewName.block=TRUE 设置为非阻塞模式,则它不再是 NBM。

编程观点——

阻止执行

在阻塞模式下,DirectView 对象(在这些示例中称为 dview)将命令提交给控制器,控制器将命令放入引擎队列中以供执行。apply() 调用然后阻塞,直到引擎完成执行命令。

   {
    In [2]: dview = rc[:] # A DirectView of all engines
    In [3]: dview.block=True
    In [4]: dview['a'] = 5
    In [5]: dview['b'] = 10
    In [6]: dview.apply(lambda x: a+b+x, 27)
    Out[6]: [42, 42, 42, 42]
   }

非阻塞执行

在非阻塞模式下,apply() 提交要执行的命令,然后立即返回一个 AsyncResult 对象。AsyncResult 对象为您提供了一种稍后通过其 get() 方法获取结果的方法。这允许您快速提交长时间运行的命令,而不会阻塞本地 Python/IPython 会话。

    {
    In [6]: def wait(t):
    import time
    tic = time.time()
    time.sleep(t)
    return time.time()-tic

   # In non-blocking mode
   In [7]: ar = dview.apply_async(wait, 2)

   # Now block for the result
   In [8]: ar.get()
   Out[8]: [2.0006198883056641, 1.9997570514678955, 1.9996809959411621,2.0003249645233154]

  # Again in non-blocking mode
  In [9]: ar = dview.apply_async(wait, 10)

  # Poll to see if the result is ready
  In [10]: ar.ready()
  Out[10]: False

  # ask for the result, but wait a maximum of 1 second:
  In [45]: ar.get(1)
  }

我希望这能帮到您。

于 2014-10-28T07:07:31.127 回答