day10-进程锁+进程池
进程锁:
from multiprocessing import Process, Lock def f(l, i): l.acquire() print('hello world', i) l.release() if __name__ == '__main__': lock = Lock() for num in range(100): Process(target=f, args=(lock, num)).start() # 数据无乱序打印
进程池:
from multiprocessing import Process, Pool,freeze_support import time import os def Foo(i): time.sleep(2) print("in process",os.getpid()) return i + 100 def Bar(arg): print('-->exec done:', arg,os.getpid()) if __name__ == '__main__': #freeze_support() pool = Pool(processes=5) #允许进程池同时放入5个进程 print("主进程",os.getpid()) for i in range(10): pool.apply_async(func=Foo, args=(i,), callback=Bar) #callback=回调 #pool.apply(func=Foo, args=(i,)) #串行 #pool.apply_async(func=Foo, args=(i,)) #并行 print('end') pool.close() pool.join() #进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。.join() # 主进程 13008 # end # in process 10960 # -->exec done: 100 13008 # in process 12656 # -->exec done: 101 13008 # in process 9144 # -->exec done: 102 13008 # in process 10316 # -->exec done: 103 13008 # in process 11188 # -->exec done: 104 13008 #