2011-09-04 17 views
0

我想運行一個方法,它有一個無限循環來創建視頻顯示。此方法在另一個處理硬件輸入的循環中調用,因此無法像視頻一樣快速循環,如果使用外部循環運行視頻,會導致延遲。有沒有辦法啓動視頻循環,然後啓動硬件循環並分別運行它們?目前,如果我打電話給視頻循環,它只是坐在那個循環,直到它返回。一次在Python中運行多種方法

回答

2

是的,你可以使用Python自己的threading模塊,或者像gevent這樣的協作微線程模塊。

需要注意的是Python的線程機制進行本免責聲明的CPython的(在大多數框的默認Python實現):

由於全局解釋器鎖,在CPython的只有一個線程可以執行Python代碼一次(甚至儘管某些面向性能的庫可能會克服這個限制)。如果您希望您的應用程序更好地利用多核計算機的計算資源,建議您使用multiprocessing。但是,如果要同時運行多個I/O限制任務,線程仍然是一個合適的模型。

根據您所調用的底層模塊如何操作,您可能會發現在使用threading時,如果有的話,一個線程不會經常放棄控制。在這種情況下,使用協同微線程可能是您唯一的選擇。

+0

對不起,我不得不撕下你的第一行:D –

1

是的,你可以使用Python自己的multiprocessing模塊。

請注意,多處理不需要與GIL作鬥爭,並且可以同時處理所有你需要的事情。

另一方面,多處理模塊有一個警告,當你產生一個進程時,它是一個完全獨立的python解釋器。所以它不只是一個OS控制的線程。這本身就是一個完全不同的過程。這可能會增加程序的開銷,但完全避開GIL的優勢使得這只是一個溫和的問題。

+0

是的,這也可以工作。但值得注意的是,你必須使用的通信機制變成跨進程而不是跨進程,因此不像共享對象那麼簡單,因爲每個進程都有自己的堆。 – cdhowie

相關問題