天天看點

python多程序傳遞參數,Python多程序-程序間資料的傳遞

兩個程序間的資料是獨立的,要進行資料傳遞的話可通過幾個方法

Queue

通過隊列來進行程序間資料的傳遞

# -*- coding:utf-8 -*-

__author__ = "MuT6 Sch01aR"

from multiprocessing import Process, Queue

def Child_Process(n):

n.put("Data From Child Process")

if __name__ == '__main__':

q = Queue()

p = Process(target=Child_Process, args=(q,))

p.start()

print(q.get())

p.join()

運作結果

python多程式傳遞參數,Python多程式-程式間資料的傳遞

父程序中聲明了一個queue,也生成了一個子程序,然後父程序把queue克隆一份,然後通過pickle序列化queue,再把queue進行pickle反序列化傳入子程序

兩個程序之間通過程序queue進行資料傳遞需要經過pickle的序列化和反序列化

Pipe

通過管道來進行程序間資料的傳遞

# -*- coding:utf-8 -*-

__author__ = "MuT6 Sch01aR"

from multiprocessing import Process, Pipe

def f(conn):

conn.send("Data_1 from Conn_1")

conn.send("Data_2 from Conn_1")

print("Conn_1: ",conn.recv())

conn.close()

if __name__ == '__main__':

conn_1, conn_2 = Pipe() #生成管道的兩邊,分别傳給兩個程序

p = Process(target=f, args=(conn_1,))

p.start()

print("Conn_2: ",conn_2.recv())

print("Conn_2: ",conn_2.recv())

conn_2.send("Data_1 from Conn_2")

p.join()

運作結果

python多程式傳遞參數,Python多程式-程式間資料的傳遞

上面是兩邊的管道收發資料的次數一樣,如果把conn_2給conn_1發送資料的那一行代碼去掉

腳本就會在conn_1接收資料處一直等着

python多程式傳遞參數,Python多程式-程式間資料的傳遞