欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python多進程的使用詳情

 更新時間:2021年09月16日 15:45:57   作者:碼農(nóng)飛哥  
本篇重點介紹Python多進程的使用,主要介紹其的一些方法及進程的創(chuàng)建等,想進一步了解的小伙伴請跟小編一起進入下文吧

一、進程的創(chuàng)建

Pythonmultiprocessing模塊提供了Process類,該類可用來在各平臺下創(chuàng)建新進程。其構(gòu)造函數(shù)是:

__init__(self, group=None, target=None, name=None, args=(), kwargs={})


其中,各個參數(shù)的含義如下:

  • group: 該參數(shù)未實現(xiàn),不需要傳參
  • target:為新建進程指定執(zhí)行任務(wù),也就是指定一個函數(shù)
  • args:以元組的方式,為target指定的方法傳遞參數(shù),如果傳入的是元組中有多個參數(shù)的話則傳入方式是(arg1,arg2,....argn,)
  • kwargs:以字典的方法,為target指定的方法傳遞參數(shù)。
  • name: 為新建進程設(shè)置名稱

1、一些常用方法介紹

start() 方法用于啟動進程
run() 方法用于運行所要執(zhí)行的任務(wù)
is_alive() 方法用于判斷當前進程是否還活著
getPid() 方法用于獲取進程的ID號。

直接創(chuàng)建Process類的實例對象,由此就可以創(chuàng)建一個新的進程;

這個就類似于直接創(chuàng)建實例化線程Thread類

from multiprocessing import Process
import os
# 定義要調(diào)用的方法
def async_fun(name, add):
    for arc in add:
        print(name + str(os.getpid()) + " " + arc)

if __name__ == '__main__':
    my_tuple = ("碼農(nóng)飛哥", "今天是宅家的一天", "30歲了還沒對象焦慮呀")

    # 創(chuàng)建進程
    process = Process(target=async_fun, args=("子進程", my_tuple))
    # 啟動子進程
    process.start()
    # 啟動主進程
    async_fun("主進程", my_tuple)

運行結(jié)果是:

主進程11610 碼農(nóng)飛哥
主進程11610 今天是宅家的一天
主進程11610 30歲了還沒對象焦慮呀
子進程11612 碼農(nóng)飛哥
子進程11612 今天是宅家的一天
子進程11612 30歲了還沒對象焦慮呀

這里需要注意的一點是,必須要將代碼放在if __name__ == '__main__': 代碼塊中。通過os.getpid()方法來獲取進程號。

通過繼承Process類的子類,創(chuàng)建實例對象,也可以創(chuàng)建新的進程。

第二種方式就是通過繼承Process類的子類,創(chuàng)建實例對象,也可以創(chuàng)建新的進程,不過這種方式需要重寫父類的run()方法。這種方法就類似于直接繼承Thread類創(chuàng)建線程。

import multiprocessing
import os


# 定義要調(diào)用的方法
def async_fun(name, add):
    for arc in add:
        print(name + str(os.getpid()) + " " + arc)


class MyProcess(multiprocessing.Process):
    def __init__(self, name, add):
        multiprocessing.Process.__init__(self)
        self.add = add
        self.name = name
        # 重寫run()方法

    def run(self):
        async_fun(self.name, self.add)


if __name__ == '__main__':
    my_tuple = ("碼農(nóng)飛哥", "今天是宅家的一天", "宅家也不能虛度")
    myprocess = MyProcess("子進程", my_tuple)
    myprocess.start()
    # 主進程
    async_fun("主進程", my_tuple)

運行結(jié)果同上:

主進程11610 碼農(nóng)飛哥
主進程11610 今天是宅家的一天
主進程11610 30歲了還沒對象焦慮呀
子進程11612 碼農(nóng)飛哥
子進程11612 今天是宅家的一天
子進程11612 30歲了還沒對象焦慮呀

這里還是推薦使用第一種方法創(chuàng)建進程,因為這種方式創(chuàng)建進程比較簡潔

二、進程池的使用

由于創(chuàng)建進程對系統(tǒng)的開銷比較大。所以,所以在實際開發(fā)中一般都會使用進程池來創(chuàng)建進程。進程池的使用與線程池的使用也是有神似的地方。同樣的在multiprocessing模塊中提供了Pool函數(shù)來創(chuàng)建進程池。

import os
from multiprocessing import Pool
import time


# 定義要調(diào)用的方法
def async_fun(add):
    time.sleep(1)
    print("進程號:" + str(os.getpid()) + " " + add)


if __name__ == '__main__':
    add = "碼農(nóng)飛哥,今天是宅家的一天,30歲了還沒對象焦慮呀"
    # 創(chuàng)建包含4個進程的進程池
    pool = Pool(processes=4)
    # 提交action
    pool.apply_async(func=async_fun, args=(add,))
    pool.apply_async(func=async_fun, args=("加油加油",))
    pool.close()
    pool.join()

運行結(jié)果是:

進程號:11658 碼農(nóng)飛哥,今天是宅家的一天,30歲了還沒對象焦慮呀
進程號:11659 加油加油

同樣的進程池也可以通過with語句來創(chuàng)建

from multiprocessing import Pool
import os
import time


def async_add(max):
    time.sleep(1)
    print("進程號:" + str(os.getpid()) + "最大值是" + str(max))


if __name__ == '__main__':
    with Pool(processes=4) as pool:
        # 使用線程池執(zhí)行max計算
        results = pool.map(async_add, (20, 30, 40, 50))

運行結(jié)果是:

進程號:11726最大值是20
進程號:11725最大值是30
進程號:11727最大值是40
進程號:11728最大值是50

三、多進程和多線程的優(yōu)缺點對比

多進程的優(yōu)點就是穩(wěn)定性好,一個子進程崩潰了,不會影響主進程以及其余子進程,各個子進程各用一套獨立的內(nèi)存空間。多線程的優(yōu)點就是效率高,適用于批處理等功能。
多進程的缺點就是創(chuàng)建進程的代價非常大,因為操作系統(tǒng)要給每個進程分配固定的資源,并且操作系統(tǒng)對進程的總數(shù)會有一定的限制,若進程過多,操作系統(tǒng)調(diào)度都會存在問題,會造成假死狀況。

總結(jié):

到此這篇關(guān)于Python多進程的使用詳情的文章就介紹到這了,更多相關(guān)Python多進程的使用,內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Django中動態(tài)地過濾查詢集的實現(xiàn)

    在Django中動態(tài)地過濾查詢集的實現(xiàn)

    本文主要介紹了Django中動態(tài)地過濾查詢集的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python加密word文檔詳解

    Python加密word文檔詳解

    這篇文章主要介紹了Python實現(xiàn)對word文檔添加密碼去除密碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 將python代碼和注釋分離的方法

    將python代碼和注釋分離的方法

    下面小編就為大家分享一篇將python代碼和注釋分離的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • pytorch標簽轉(zhuǎn)onehot形式實例

    pytorch標簽轉(zhuǎn)onehot形式實例

    今天小編就為大家分享一篇pytorch標簽轉(zhuǎn)onehot形式實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 利用python實現(xiàn)在微信群刷屏的方法

    利用python實現(xiàn)在微信群刷屏的方法

    今天小編就為大家分享一篇利用python實現(xiàn)在微信群刷屏的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • numpy ndarray 按條件篩選數(shù)組,關(guān)聯(lián)篩選的例子

    numpy ndarray 按條件篩選數(shù)組,關(guān)聯(lián)篩選的例子

    今天小編就為大家分享一篇numpy ndarray 按條件篩選數(shù)組,關(guān)聯(lián)篩選的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解python日志輸出使用配置文件格式

    詳解python日志輸出使用配置文件格式

    這篇文章主要介紹了詳解python日志輸出使用配置文件格式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2021-02-02
  • python+selenium+PhantomJS抓取網(wǎng)頁動態(tài)加載內(nèi)容

    python+selenium+PhantomJS抓取網(wǎng)頁動態(tài)加載內(nèi)容

    一般我們使用python的第三方庫requests及框架scrapy來爬取網(wǎng)上的資源,但是設(shè)計javascript渲染的頁面卻不能抓取,此 時,我們使用web自動化測試化工具Selenium+無界面瀏覽器PhantomJS來抓取javascript渲染的頁面,下面實現(xiàn)一個簡單的爬取
    2020-02-02
  • 如何利用python寫GUI及生成.exe可執(zhí)行文件

    如何利用python寫GUI及生成.exe可執(zhí)行文件

    工作中需要開發(fā)一個小工具,簡單的UI界面可以很好的提高工具的實用性,由此開啟了我的第一次GUI開發(fā)之旅,這篇文章主要給大家介紹了關(guān)于如何利用python寫GUI及生成.exe可執(zhí)行文件的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • python實現(xiàn)汽車管理系統(tǒng)

    python實現(xiàn)汽車管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)汽車管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評論