在我为ipython发现的所有例子中:
似乎在使用负载均衡视图块时设置为False。
我想知道为什么?
此外,是否可以将其设置为True以及具有什么含义?
我知道这可能是一个基本问题,但作为新手,我找不到满意的答案。
感谢帮助
答案 0 :(得分:0)
看到东西是阻塞的,非阻塞只是获得输出的两种不同方式 - >
您要么最后输出所有命令,以便处理器将用于执行算法命令而不是产生输出,因为此处理器需要阻止其他命令,此模式称为阻止模式,我们必须在其中设置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)
}
我希望这会对你有所帮助。