python如何关闭multiprocess_python 开启进程两种方法 multiprocessing模块 介绍
一 multiprocessing模塊介紹
python中的多線程無法利用多核優勢,如果想要充分地使用多核CPU的資源(os.cpu\_count\(\)查看),在python中大部分情況需要使用多進程。
Python提供了multiprocessing。 multiprocessing模塊用來開啟子進程,并在子進程中執行我們定制的任務(比如函數),該模塊與多線程模塊threading的編程接口類似。
multiprocessing模塊的功能眾多:支持子進程、通信和共享數據、執行不同形式的同步,>提供了Process、Queue、Pipe、Lock等組件。
需要再次強調的一點是:與線程不同,進程沒有任何共享狀態,進程修改的數據,改動僅限于該進程內。
三 Process類的使用
創建并開啟子進程的方式一
Process 傳字典 或者args 傳參數也可以
start()開啟子進程
from multiprocessing import Process
import time
def task(name):
print("%s is running" % name)
time.sleep(3)
print("%s is done" % name)
if __name__ == "__main__":
# 實例化
# args 為函數傳參數
t = Process(target=task, args=("子進程1",))
# 開啟子進程
t.start() # 僅僅只是給操作系統發送一個信號 與平常print沒有什么區別
print("主")
'''
主
子進程1 is running
子進程1 is done
'''
'''
看得出是先打印主 再開啟子進程1的
'''
用關鍵字參數kwargs傳參
from multiprocessing import Process
import time
def task(name):
print("%s is running" % name)
time.sleep(3)
print("%s is done" % name)
if __name__ == "__main__":
# 實例化
# 也可以用kwargs 為函數傳參數 以字典方式
t = Process(target=task, kwargs={'name': '子進程1'})
t.start()
'''
子進程1 is running
子進程1 is done
'''
應用程序是開不了子進程的 p.start() 給操作系統發送信號 至于操作系統什么時候開進程,開多長時間應用程序是控制不了。
p.start() 給操作系統發送信號 告訴操作系統給個開個子進程吧 ?操作系統收到后 申請內存空間 把父進程的地址空間數據 拷貝給子進程
作為子進程的初始狀態
父進程不知道操作系統會
默認是先 開啟主進程執行,主進程執行完,再開啟 子進程執行,再到子進程執行結束。
創建并開啟子進程的方式二
自己寫一個子類去繼承他 不用默認的類
方法一定要寫run
from multiprocessing import Process
import time
# 自己寫一個子類去繼承他 不用默認的類
# Process的類傳進去
class MyProcess(Process):
# 重寫了init方法 父類就被覆蓋掉
def __init__(self, name):
# 重用父類 因為父類還有很多有用功能,繼承父類
super().__init__()
self.name = name
# 方法一定要寫run
def run(self):
print("%s is running" % self.name)
time.sleep(3)
print("%s is done" % self.name)
if __name__ == "__main__":
# 實例化 直接用自己自定義的類開子進程
# args 為函數傳參數
p = MyProcess("子進程1")
# 開啟子進程
p.start() # 僅僅只是給操作系統發送一個信號 與平常print沒有什么區別
# p.start() 本質是調用run方法
print("主")
來源:http://www.icode9.com/content-3-250451.html
總結
以上是生活随笔為你收集整理的python如何关闭multiprocess_python 开启进程两种方法 multiprocessing模块 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux系统-软链接与硬链接区别
- 下一篇: Ubuntu下使用VSCode的laun