进程锁和线程锁的写法看起来差不多,进程锁是用来防止使用多进程的时候打印出现混乱。
# coding=utf-8 from multiprocessing import Process, Lock def f(l, i): l.acquire() print u'进程', i l.release() if __name__ == '__main__': lock = Lock() for i in range(10): Process(target=f, args=(lock, i)).start()
进程池可以控制同一时间有多少个进程可以在cup上运行
# coding=utf-8 from multiprocessing import Pool import os, time def f(i): print i, os.getpid() time.sleep(2) def c(arg): print u'回调' if __name__ == '__main__': # 在Windows上运行必须要写这个判断,否则报错,还有其它解决方法,可参考报错提示 pool = Pool(processes=3) # 进程池允许同时放10个进程 for i in range(10): p = pool.apply_async(func=f, args=(i,), callback=c) # apply_async并行,apply串行, callback是进程运行结束的回调(在父进程上运行) pool.close() pool.join() # 等所有的进程运行结束(一定要在colse之后join)
执行结果:
0 7700
1 7780
2 4636
3 7700
回调
回调
4 7780
5 4636
回调
6 7700
回调
回调7
7780
8回调
4636
9 7700
回调
回调
回调
回调
multiprocessing.dummy模块下的Pool可以实现线程池,写法类似进程池