在我为 ipython 找到的所有示例中:
似乎在使用负载平衡视图块时设置为 False。
我想知道为什么?
另外,是否可以将其设置为 True 以及这会产生什么影响?
我知道这可能是一个基本问题,但作为新手,我找不到令人满意的答案。
感谢帮助
在我为 ipython 找到的所有示例中:
似乎在使用负载平衡视图块时设置为 False。
我想知道为什么?
另外,是否可以将其设置为 True 以及这会产生什么影响?
我知道这可能是一个基本问题,但作为新手,我找不到令人满意的答案。
感谢帮助
看到事情是阻塞和非阻塞只不过是两种不同的方式来获得你的输出 - >
要么您希望最后输出所有命令,以便处理器将用于执行算法命令而不是产生输出,因为该处理器需要阻塞其他命令,这种模式称为阻塞模式,我们有设置 directViewName.block=TRUE
或者您希望在为此生成输出后立即获得输出,您需要指定它不应阻塞命令的处理器,即 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)
}
我希望这能帮到您。