進程鎖和線程鎖的寫法看起來差很少,進程鎖是用來防止使用多進程的時候打印出現混亂。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能夠實現線程池,寫法相似進程池線程