async python两个_【Python】python中实现多进程与多线程
進程與線程
進程(process)就是任務,是計算機系統進行資源分配和調度的基本單位[1]。比如,打開一個word文件就是啟動了一個word進程。
線程(thread)是進程內的子任務。比如word中可以進行編輯、拼寫檢查和打印等子任務。
我們目前的操作系統都是多任務的操作系統,多任務的實現方式[2]:
- 多進程
- 多線程
- 多進程 + 多線程
多進程:multiprocessing模塊
Unix Like[3]系統中,可以用python中os模塊的os.fork()方法,為當前進程創建一個“子進程”[4],當前進程稱作“父進程”。
說的簡單一點,就是當你調用os.fork()以后,會有兩個進程運行這之后的代碼,它們的pid(process id)不一樣。
由于一些玄學或是一些不知名的原因,用這個方法以后,我心愛的mbp風扇呼呼響,所以只好作罷。
multiprocessing模塊比os.fork()好用的多,這個模塊也可以用于創建多進程。而且它有一些基本的對象如Queue等支持進程間通信。下面主要討論用multiprocessing模塊怎么實現多進程。
- 創建一個子進程
multiprocessing.Process類可以初始化一個子進程,target參數傳入子進程函數。
from multiprocessing import Process import os, time# 子進程函數 def sub_process():print('Sub Process (%s) Start!' % os.getpid())for i in reversed(range(3)):time.sleep(1)print(i+1)time.sleep(1)print('Over!')print('Main Prcess (%s) Start!' % os.getpid()) for i in reversed(range(3)):time.sleep(1)print(i+1) time.sleep(1) print('GO!') time.sleep(1) p = Process(target=sub_process) # 子進程開始 p.start() # 等待子進程結束 p.join()代碼執行的效果如下:
python創建一個進程https://www.zhihu.com/video/1060526231002390528- 創建多個子進程
multiprocessing.Pool類可以創建一個進程池,進程吃通過調用apply_async函數來創建一個新的進程。
from multiprocessing import Pool import os,timedef sub_process(n):time.sleep(1)print('Process (%s) is running!' % os.getpid())# 指定同時運行的進程數 p = Pool(4) for i in range(5):p.apply_async(sub_process,args=(i+1,)) # 不能繼續添加進程了 p.close() p.join()python進程池https://www.zhihu.com/video/1060539118525841408可以清晰的看見,我們指定了同時運行的進程數為4,因此最開始添加的4個進程都停了1秒就有了輸出,而最后一個進程在1秒以后才有輸出。
多線程:threading模塊
多線程相比于多進程的好處是能更快一點,但是也沒快多少。python中常用threading模塊實現多線程。
import threading, timedef thread():print('%s is running' % threading.current_thread().name)print('%s is running' % threading.current_thread().name) time.sleep(1) t = threading.Thread(target=thread, name='Sub_Thread') t.start() t.join()后記
當然多進程和多線程的內容遠不止這些,其他的還有進程間通信、線程中的鎖、ThreadLocal等。由于立下了一天寫一篇文章的flag,如果一開始就把這件事搞的非常復雜就會損失做這個事的樂趣。所以我打算偷點懶,少點寫,以后再增加工作量~
Ref.
[1] 百度百科:進程
[2] 廖雪峰python教程:進程與線程
[3] 《鳥哥的Linux私房菜》
[4] 廖雪峰python教程:多進程
總結
以上是生活随笔為你收集整理的async python两个_【Python】python中实现多进程与多线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python常用模块实例_python中
- 下一篇: python 实例对象 浅拷贝_Pyth