进程相当于是一个工作车间,里面可以有很多流水线(线程)。使用multiprocessing来创建进程对象。代码如下:
import multiprocessing
num = 0
def add1(n):
global num
for i in range(n):
num += 1
print(num)
def add2(n):
global num
for i in range(n):
num += 1
print(num)
def main():
# 创建进程对象
p1 = multiprocessing.Process(target=add1,args= (1000,))
p2 = multiprocessing.Process(target=add2, args= (1000,))
# 启动进程
p1.start()
p2.start()
if __name__ == "__main__":
main()
在创建进程时,第一个参数将需要执行的任务传入该进程,第二个参数则是将必要的值传给该任务,值得注意的是第二个参数必须以元组的形式传入。然后使用start()方法启动进程对象。此时两个进程中的任务互不影响,各干各的,所以此时还不能叫多任务。执行结果如下:
D:\Super\Anaconda\python.exe D:/Super/python_file/study/8.网络编程/6-多进程创建.py
1000
1000
Process finished with exit code 0
要想在进程中通信,使其进行多任务。我们使用Queue()队列作为两个进程之间的通信媒介,从而实现多任务。代码如下:
import multiprocessing
def add_data(q):
'''向队列里面加数据'''
while True:
if not q.full():
q.put('----12')
print(1)
else:
print('满了')
break
def get_data(q):
'''从队列里面取数据'''
while True:
if not q.empty():
data = q.get()
print(data)
else:
print("空了")
break
def main():
# 创建队列
q = multiprocessing.Queue(5) # 相当于是一个小内存,两个进程需要交换的数据将在这里进行中转。
# 创建进程对象
p1 = multiprocessing.Process(target=add_data,args=(q,))
p2 = multiprocessing.Process(target=get_data,args=(q,))
# 启动进程
p1.start()
p2.start()
if __name__ == "__main__":
main()
首先,必须使用multiprocessing中的Queue类,其次创建的队列相当于一个小内存,进程间需要交换的数据都在这里进行中转。从而实现进程间通信。
在队列中,put()方法是向队列放数据,get()方法是取数据,full()判断是否为满,默认返回True,empty()判断是否为空,默认返回True。