1.进程
1 import multiprocessing 2 import threading 3 4 data_list = [] 5 6 def task(arg): 7 data_list.append(arg) 8 print(data_list) 9 10 def run(): 11 for i in range(10): 12 p1 = multiprocessing.Process(target=task,args=(i,))#创建一个进程 13 p2 = threading.Thread(target=task,args=(i,))#创建一个线程 14 p1.start() 15 16 if __name__ == "__main__": 17 run()
进程常用功能
1 import time 2 import multiprocessing 3 4 def task(arg): 5 time.sleep(2) 6 print(arg) 7 8 def run(): 9 print("111") 10 p1 = multiprocessing.Process(target=task,args=(1,)) 11 p1.name = "pp1" 12 p1.start() 13 print("222") 14 15 p2 = multiprocessing.Process(target=task,args=(2,)) 16 p2.name = "pp2" 17 p2.start() 18 print("333") 19 20 if __name__ == "__main__": 21 run()
通过集成方式创建进程
1 class MyProcess(multiprocessing.Process): 2 def run(self): 3 print("当前进程",multiprocessing.current__process()) 4 5 def run(): 6 p1 = MyProcess() 7 p1.start() 8 9 p2 = MyProcess() 10 p2.start() 11 12 if __name__ == '__main__': 13 run()
2.进程间的数据共享
进程间的数据本来是不共享的,通过queue模块和Manager方法可以实现共享
1 import multiprocessing 2 import threading 3 import queue 4 import time 5 6 #进程间的数据共享:multiprocessing.Queue 7 q = multiprocessing.Queue() 8 9 def task(arg,q): 10 q.put(arg) 11 12 def run(): 13 for i in range(10): 14 p = multiprocessing.Process(target=task,args=(i,q)) 15 p.start() 16 while True: 17 v = q.get() 18 print(v) 19 20 run() 21 22 23 24 #进程间的数据共享:Manager 25 26 def task(arg,dic): 27 time.sleep(2) 28 dic[arg] = 100 29 30 if __name__ == '__main__': 31 m = multiprocessing.Manager() 32 dic = m.dict() 33 process_list = [] 34 35 for i in range(10): 36 p = multiprocessing.Process(target=task,args=(i,dic)) 37 p.start() 38 39 process_list.append(p) 40 41 while True: 42 count = 0 43 for p in process_list: 44 if not p.is_alive(): 45 count += 1 46 if count == len(process_list): 47 break 48 print(dic)
3.进程锁
1 import time 2 import multiprocessing 3 4 lock = multiprocessing.RLock() 5 6 def task(arg): 7 print("111") 8 lock.acquire() 9 time.sleep(2) 10 print(arg) 11 lock.release() 12 13 if __name__ == '__main__': 14 p1 = multiprocessing.Process(target=task,args=(1,)) 15 p1.start() 16 17 p2 = multiprocessing.Process(target=task,args=(2,)) 18 p2.start()
4.进程池
1 import time 2 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor 3 4 def task(arg): 5 time.sleep(2) 6 print(arg) 7 8 if __name__ == "__main__": 9 pool = ProcessPoolExecutor(5) 10 for i in range(10): 11 pool.submit(task,i)