#思考下下面的写法为什么是错误的!
from multiprocessing import Process,Lock,Pipe,Queue
import os
import queue
#实例化队列,消息队列:产生后被消费就不存储该数据,确保了数据船底得唯一性
qe=queue.Queue()
def pro(n):
while n <100:
#put方法是往对列表里面传惨
qe.put(n)
print("已发送数据",n)
n=n+1
def ger():
while True:
#get方法是往对队列里面拿取参数
print("已拿取数据",qe.get())
if __name__ == '__main__':
#c错误用法,进程不共享导致p_1拿不到p_1的数据
p_0=Process(target=pro,args=(1,))
p_1=Process(target=ger,args=())
p_0.start()
p_1.start()
#错误的写法2
class pro_ger(object):
def __init__(self):
self.qe = queue.Queue()
def pro(self,n):
while n < 100:
# put方法是往对列表里面传惨
self.qe.put(n)
print("已发送数据", n)
n = n + 1
def ger(self):
while True:
# get方法是往对队列里面拿取参数
print("已拿取数据", self.qe.get())
def process(self):
p_0=Process(target=pro,args=(1,))
p_1=Process(target=ger,args=())
p_0.start()
p_1.start()
if __name__ == '__main__':
pro_ger().process()
#继承Process
class pro_ge(Process):
def __init__(self):
Process.__init__(self)
def run(self):
print(1)
if __name__ == '__main__':
p_7=pro_ge()
p_7.start()#集成了Process后可直接使用进程.start()进程启动
#错误写法
class pro_ger(object):
def __init__(self):
self.put, self.get = Pipe()
def pro(self,n):
for i in range(0,n):
# put方法是往对列表里面传惨
self.put.send(n)
print("已发送数据", n)
n = n + 1
def ger(self):
while True:
# get方法是往对队列里面拿取参数
print("已拿取数据", self.get.recv())
# def process(self):
# p_0=Process(target=pro,args=(1,))
# p_1=Process(target=ger,args=())
# p_0.start()
# p_1.start()
if __name__ == '__main__':
# pro_ger()
p_0 = Process(target=pro_ger().pro, args=(5,))
p_1 = Process(target=pro_ger().ger, args=())
p_0.start()
p_1.start()
#正确写法
#正确写法,任何时候少用死循环
class pro_ger(object):
# def __init__(self):
def pro(self,n,put):
for i in range(0,n):
# put方法是往对列表里面传惨
put.send(i)
print("已发送数据", i)
def ger(self,get):
while True:
# get方法是往对队列里面拿取参数
print("已拿取数据", get.recv())
# def process(self):
# p_0=Process(target=pro,args=(1,))
# p_1=Process(target=ger,args=())
# p_0.start()
# p_1.start()
if __name__ == '__main__':
# pro_ger()
put, get = Pipe()
p_0 = Process(target=pro_ger().pro, args=(1000,put))
p_1 = Process(target=pro_ger().ger, args=(get,))
p_0.start()
p_1.start()
#正确写法,任何时候少用死循环
class pro_ger(object):
# def __init__(self):
def pro(self,n,qe1):
for i in range(0,n):
# put方法是往对列表里面传惨
qe1.put(i)
print("已发送数据", i)
def ger(self,qe1):
while True:
# get方法是往对队列里面拿取参数
print("已拿取数据", qe1.get())
# def process(self):
# p_0=Process(target=pro,args=(1,))
# p_1=Process(target=ger,args=())
# p_0.start()
# p_1.start()
if __name__ == '__main__':
# pro_ger()
#这是进程带的队列,不是queue,queue不支持多进程
qe1=Queue()
p_0 = Process(target=pro_ger().pro, args=(1000,qe1))
p_1 = Process(target=pro_ger().ger, args=(qe1,))
p_0.start()
p_1.start()
python 进程
最新推荐文章于 2024-07-11 17:34:26 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)