在Python中,多進程之間可以通過以下幾種方式共享數據:
multiprocessing.Value
和multiprocessing.Array
可以創建共享內存的變量和數組。這些共享變量和數組可以在多個進程之間進行讀寫操作。from multiprocessing import Process, Value, Array
def update_value(v):
v.value += 1
def update_array(a):
for i in range(len(a)):
a[i] += 1
if __name__ == '__main__':
v = Value('i', 0)
a = Array('i', [0, 1, 2, 3, 4])
p1 = Process(target=update_value, args=(v,))
p2 = Process(target=update_array, args=(a,))
p1.start()
p2.start()
p1.join()
p2.join()
print(v.value) # 輸出: 1
print(a[:]) # 輸出: [1, 2, 3, 4, 5]
multiprocessing.Pipe
可以創建進程之間的管道,并通過管道發送和接收數據。from multiprocessing import Process, Pipe
def send_data(conn):
conn.send("Hello from child process!")
def receive_data(conn):
data = conn.recv()
print(data)
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p1 = Process(target=send_data, args=(child_conn,))
p2 = Process(target=receive_data, args=(parent_conn,))
p1.start()
p2.start()
p1.join()
p2.join()
multiprocessing.Queue
可以創建進程之間的隊列,并通過隊列發送和接收數據。from multiprocessing import Process, Queue
def send_data(q):
q.put("Hello from child process!")
def receive_data(q):
data = q.get()
print(data)
if __name__ == '__main__':
q = Queue()
p1 = Process(target=send_data, args=(q,))
p2 = Process(target=receive_data, args=(q,))
p1.start()
p2.start()
p1.join()
p2.join()
需要注意的是,由于多進程之間是獨立的,所以數據的共享需要通過上述方式進行顯式地操作。另外,對于一些特殊的數據類型(如字典、集合等),需要使用multiprocessing.Manager
來創建共享對象。