在Python中,multiprocessing
模塊允許你創建多個進程來并行執行任務。然而,由于全局解釋器鎖(GIL)的存在,Python的線程并不能真正地并行執行。為了在多進程之間共享數據,你可以使用multiprocessing
模塊提供的一些數據結構和通信機制。
Value和Array:這些是用于在進程之間共享單個值或數組的類。
Value
:用于共享單個值(如整數、浮點數等)。它提供了一個簡單的原子操作來設置和獲取值。Array
:用于共享一個固定大小的數組。它類似于numpy
數組,但可以在多個進程之間共享。Manager:Manager
對象允許你創建可以在多個進程之間共享的數據結構,如列表、字典等。這些數據結構實際上是在一個單獨的進程中維護的,并通過網絡與主進程通信。
Queue和Pipe:這些是用于在進程之間傳遞數據的通信機制。
Queue
:一個線程和進程安全的隊列,可以在多個進程之間安全地傳遞數據。Pipe
:一對連接對象,可以在兩個進程之間雙向傳遞數據。下面是一個使用Manager
在多進程之間共享數據的示例:
from multiprocessing import Process, Manager
def worker(shared_list):
shared_list.append('Hello from process')
if __name__ == '__main__':
manager = Manager()
shared_list = manager.list(['Hello from main process'])
p = Process(target=worker, args=(shared_list,))
p.start()
p.join()
print(shared_list) # 輸出:['Hello from main process', 'Hello from process']
在這個示例中,我們創建了一個Manager
對象,并使用它創建了一個可以在多個進程之間共享的列表。然后,我們創建了一個子進程,并將共享列表作為參數傳遞給它。子進程向共享列表中添加了一個字符串,最后我們打印出共享列表的內容,可以看到兩個進程都成功地向列表中添加了數據。