進程鎖和進程池(附線程池)

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

相關文章
相關標籤/搜索