进程,进程间的数据共享,进程锁,进程池,

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)
原文地址:https://www.cnblogs.com/s593941/p/9643075.html