當前位置:
首頁 > 最新 > 進程間通信-Queue

進程間通信-Queue

由於進程間不共享數據,通信間使用Socket和Queue通信。通信不只是發送接收消息,還能實現數據的上傳與下載。

socket與queue之間的不同:socket不只是能單機之間通信,還可以實現網路之間的多台電腦之間的通信。queue隊列通信先近先出。

本文就文件上的數據傳遞作為進程間的數據共享作為案例。

importmultiprocessing

defread(file_name,queue):

try:

file =open(file_name,"rb")

content = file.read()

queue.put(content)

exceptException:

pass

defwrite(file_name,queue):

print(queue.empty())

if notqueue.empty():

withopen("[復件]"+file_name,"wb")asfile:

file.write(queue.get(True))

print("寫入成功。")

else:

print("請求文件不存在")

defmain():

queue = multiprocessing.Queue()

file_name =input("請輸入文件名稱:")

p1 = multiprocessing.Process(target=read,

args=(file_name,queue))

p2 = multiprocessing.Process(target=write,

args=(file_name,queue))

p1.start()

p1.join()

p2.start()

if__name__ =="__main__":

main()

importsocket

importmultiprocessing

defwrite(file_name):

"""文件的讀取並發送"""

client_tcp_socket = socket.socket(

socket.AF_INET,socket.SOCK_STREAM)

client_tcp_socket.connect(("",

8080))#創建客戶端的socket

try:

content =open(file_name,"rb")

txt = content.read()

client_tcp_socket.send(txt)

content.close()

exceptException:

print("你請求的文件不存在。")

finally:

client_tcp_socket.close()

defmain():

"""本文最初想法是,新建兩個子進程,

一個子進程負責獲取要拷貝的文件內容,

發送給另一個子進程,另一個子進程負責接收,

並新建文件保存接收到了拷貝的內容。

主進程先建立一個伺服器tcp套接字,

使其處於監聽狀態,再新建一個客戶端伺服器,

鏈接到伺服器,將兩個socket分別作為參數傳

遞給兩個進程,進行操作。最後關閉套接

字,錯在不能將套接字作為參數傳遞給子進程"""

file_name =input("請輸入要拷貝的文件:")

server_tcp_socket = socket.socket(

socket.AF_INET,socket.SOCK_STREAM)

server_tcp_socket.bind(("",8080))

server_tcp_socket.listen(128)

#創建伺服器的socket,進入監聽狀態

p1 = multiprocessing.Process(target=write,

args=(file_name,))

p1.start()

p1.join()

new_tcp_socket,client_add =

server_tcp_socket.accept()

data = new_tcp_socket.recv(1024)

ifdata:

withopen("[復件]"+file_name,"wb")

asfile:

#數據寫入

file.write(data)

print("拷貝成功。")

else:

print("拷貝失敗。")

new_tcp_socket.close()

server_tcp_socket.close()

if__name__ =="__main__":

main()

有什麼錯誤,希望大神能給指出,交流下,大家共同進步。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PythonKnowledge 的精彩文章:

進程與線程的區別

TAG:PythonKnowledge |