zoukankan      html  css  js  c++  java
  • 进程,进程间的数据共享,进程锁,进程池,

    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)
  • 相关阅读:
    判断点是否在一个任意多边形中
    linux 内存布局以及tlb更新的一些理解
    java(内部类)
    java(面向对象 )
    java(数组及常用简单算法 )
    java(运算符,控制流程语句,函数 )
    deep-in-es6(七)
    Java(标识符,关键字,注释,常量,变量)
    MarkDown study:
    *LeetCode--Ransom Note
  • 原文地址:https://www.cnblogs.com/s593941/p/9643075.html
Copyright © 2011-2022 走看看