进程锁和线程锁的写法看起来差很少,进程锁是用来防止使用多进程的时候打印出现混乱。app
# 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上运行async
# 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)
执行结果:ui
0 7700
1 7780
2 4636
3 7700
回调
回调
4 7780
5 4636
回调
6 7700
回调
回调7
7780
8回调
4636
9 7700
回调
回调
回调
回调spa
multiprocessing.dummy模块下的Pool能够实现线程池,写法相似进程池线程