首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程间通信-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()

有什么错误,希望大神能给指出,交流下,大家共同进步。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180714G1L44V00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券