Python提供了兩個有關多線程的標準庫,thread和threading。thread提供了低級別的,原始的線程和一個鎖。threading則是一個高級模塊,提供了對thread的封裝。建立新的線程有兩種方法:python
__init__(group=None, target=None, name=None, args=(), kwargs=None, verbose=None)
參數說明: group:線程組,目前尚未實現,庫引用中提示必須是None。 target:要執行的方法; name:線程名; args/kwargs:要傳入方法的參數。
isAlive():返回線程是否在運行。正在運行指的是啓動後,終止前。 getName(name)/setName(name):獲取/設置線程名。 isDaemon(bool)/setDaemon(bool):獲取/設置是否爲守護線程。初始值從建立該線程的線程繼承而來,當沒有非守護線程仍在運行時,程序將終止。 start():啓動線程。 join([timeout]):阻塞當前上下文環境的線程,直到調用此方法的線程終止或到達指定的等待時間timeout(可選參數)。即當前的線程要等調用join()這個方法的線程執行完,或者是達到規定的時間。
方法一:直接建立threading.Thread類的對象,初始化時將可調用對象做爲參數傳入。多線程
注意:併發
t = Thread(target = run, args = ("this is a", "thread")) 這句只是建立了一個線程,並未執行這個線程,此時線程處於新建狀態。 t.start()#啓動線程 啓動線程,此時線程仍未運行,只是處於準備狀態。
方法二:經過繼承Thread類,重寫它的__init__(
)
方法和run方法。函數
因爲建立了兩個併發執行的線程t1和t2,併發線程的執行時間不定,誰先執行完的時間也不定,因此執行後打印的結果順序也是不定的。每一次執行都有可能出現不一樣的結果。this
注意:spa
from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': with Pool(5) as p: print(p.map(f, [1, 2, 3])) 結果輸出:[1, 4, 9]
在multiprocessing中,經過建立Process對象,而後調用其start()方法來生成進程。線程
from multiprocessing import Process import os def info(title): print(title) print('module name:', __name__) print('parent process:', os.getppid()) print('process id:', os.getpid()) def f(name): info('function f') print('hello', name) if __name__ == '__main__': info('main line') p = Process(target=f, args=('bob',)) p.start() p.join()