在我發現的ipython的所有例子中:load_balanced_mode()中的IPython.parallel中的阻塞和非阻塞模式有什麼區別?
看來,當使用負載平衡視圖塊時,它被設置爲False。
我想知道爲什麼?
另外,是否有可能將其設置爲真,並有什麼含義?
我知道這可能是一個基本的問題,但作爲新手我找不到滿意的答案。
欣賞的幫助
在我發現的ipython的所有例子中:load_balanced_mode()中的IPython.parallel中的阻塞和非阻塞模式有什麼區別?
看來,當使用負載平衡視圖塊時,它被設置爲False。
我想知道爲什麼?
另外,是否有可能將其設置爲真,並有什麼含義?
我知道這可能是一個基本的問題,但作爲新手我找不到滿意的答案。
欣賞的幫助
看到的是阻塞和非阻塞無非是兩種不同的方式來讓你的輸出 - >
要麼你想擁有所有命令的輸出最後,處理器將被用於執行算法命令而不是產生輸出,因爲這個處理器需要阻止其他命令,並且這種模式被稱爲阻塞模式,在該模式中我們必須設置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]
}
非阻塞執行
在非阻塞模式中,應用()提交給要執行的命令,然後立即返回一個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)
}
我希望這會幫助你。
感謝您的有用信息。所以我很好奇的是負載均衡視圖(通常在示例中不是直接使用DirectView編寫爲lview,我只是不明白爲什麼在此之前block始終設置爲false,請您詳細說明一下在你的答案? – evan54 2014-10-28 16:52:03