python3之进程
1创建一个进程:
import time import multiprocessing import os def text1(): while True: print("111111111111") print(os.getpid(), os.getppid()) time.sleep(1) def text2(): while True: print("222222222222") print(os.getpid(), os.getppid()) time.sleep(1) def main(): # text1() # text2() print(os.getpid()) #进程的pid p1 = multiprocessing.Process(target=text1, ) #创建进程 p2 = multiprocessing.Process(target=text2, ) p1.start() #执行进程 p2.start() if __name__ == "__main__": main()
2 进程与进程之间是不共享数据的,如果想实现进程之间的数据共享;需要Queue队列来实现:
q = multiprocessing.Queue() 创建队列
q.put() 向队列里面存放数据
q.get() 从队列里面获取数据
q.empty() 队列为空
import multiprocessing import time nums = [11,22,33,44] def text1(q): nums.append(55) print(nums) for temp in nums: q.put(temp) while True: print("11111111") time.sleep(1) def text2(q): new_nums = [] while True: data = q.get() new_nums.append(data) if q.empty(): break print(new_nums) while True: print("222222222") time.sleep(1) def main(): q = multiprocessing.Queue() #创建队列 """ 一个进程向Queue中写入数据,另外一个进程从Queue中获取数据, 通过Queue完成了 多个需要配合的进程间的数据共享,从而能够 起到 解耦的作用 """ p1 = multiprocessing.Process(target=text1,args=(q, )) #传递参数 p2 = multiprocessing.Process(target=text2,args=(q, )) p1.start() p2.start() if __name__ == "__main__": main()
3进程池:
import multiprocessing import time, os, random def text(i): time_start = time.time() print("开始时间:%d" % time_start) print("%d 的进程:%d" %(i,os.getpid())) time.sleep(random.random()*2) time_end = time.time() print("执行耗时:%s" %(time_end - time_start)) def main(): po = multiprocessing.Pool(3) #定义一个进程池,最大进程数为3 for i in range(0,10): po.apply_async(text,(i,)) #向进程池中添加进程 po.close() #关闭进程池, po.join() if __name__ == "__main__": main()