最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python多進(jìn)程的使用詳情

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

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

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

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


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

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

1、一些常用方法介紹

start() 方法用于啟動(dòng)進(jìn)程
run() 方法用于運(yùn)行所要執(zhí)行的任務(wù)
is_alive() 方法用于判斷當(dāng)前進(jìn)程是否還活著
getPid() 方法用于獲取進(jìn)程的ID號(hào)。

直接創(chuàng)建Process類的實(shí)例對(duì)象,由此就可以創(chuàng)建一個(gè)新的進(jìn)程;

這個(gè)就類似于直接創(chuàng)建實(shí)例化線程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歲了還沒(méi)對(duì)象焦慮呀")

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

運(yùn)行結(jié)果是:

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

這里需要注意的一點(diǎn)是,必須要將代碼放在if __name__ == '__main__': 代碼塊中。通過(guò)os.getpid()方法來(lái)獲取進(jìn)程號(hào)。

通過(guò)繼承Process類的子類,創(chuàng)建實(shí)例對(duì)象,也可以創(chuàng)建新的進(jìn)程。

第二種方式就是通過(guò)繼承Process類的子類,創(chuàng)建實(shí)例對(duì)象,也可以創(chuàng)建新的進(jìn)程,不過(guò)這種方式需要重寫父類的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("子進(jìn)程", my_tuple)
    myprocess.start()
    # 主進(jìn)程
    async_fun("主進(jìn)程", my_tuple)

運(yùn)行結(jié)果同上:

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

這里還是推薦使用第一種方法創(chuàng)建進(jìn)程,因?yàn)檫@種方式創(chuàng)建進(jìn)程比較簡(jiǎn)潔

二、進(jìn)程池的使用

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

import os
from multiprocessing import Pool
import time


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


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

運(yùn)行結(jié)果是:

進(jìn)程號(hào):11658 碼農(nóng)飛哥,今天是宅家的一天,30歲了還沒(méi)對(duì)象焦慮呀
進(jìn)程號(hào):11659 加油加油

同樣的進(jìn)程池也可以通過(guò)with語(yǔ)句來(lái)創(chuàng)建

from multiprocessing import Pool
import os
import time


def async_add(max):
    time.sleep(1)
    print("進(jìn)程號(hào):" + str(os.getpid()) + "最大值是" + str(max))


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

運(yùn)行結(jié)果是:

進(jìn)程號(hào):11726最大值是20
進(jìn)程號(hào):11725最大值是30
進(jìn)程號(hào):11727最大值是40
進(jìn)程號(hào):11728最大值是50

三、多進(jìn)程和多線程的優(yōu)缺點(diǎn)對(duì)比

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

總結(jié):

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

相關(guān)文章

  • python爬取音頻下載的示例代碼

    python爬取音頻下載的示例代碼

    這篇文章主要介紹了python爬取音頻下載的示例代碼,幫助大家更好的理解和學(xué)習(xí)python爬蟲,感興趣的朋友可以了解下
    2020-10-10
  • 解決python 執(zhí)行sql語(yǔ)句時(shí)所傳參數(shù)含有單引號(hào)的問(wèn)題

    解決python 執(zhí)行sql語(yǔ)句時(shí)所傳參數(shù)含有單引號(hào)的問(wèn)題

    這篇文章主要介紹了解決python 執(zhí)行sql語(yǔ)句時(shí)所傳參數(shù)含有單引號(hào)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python中使用絕佳的八個(gè)Debug?工具

    Python中使用絕佳的八個(gè)Debug?工具

    在Python開發(fā)中,調(diào)試是解決問(wèn)題和提高代碼質(zhì)量的關(guān)鍵,有許多強(qiáng)大的調(diào)試工具可幫助開發(fā)者更快速地發(fā)現(xiàn)和解決問(wèn)題,本文將介紹8個(gè)出色的Python調(diào)試工具,并提供詳細(xì)的示例代碼,讓你更好地了解它們的用法和優(yōu)勢(shì)
    2024-01-01
  • Python的time模塊中的常用方法整理

    Python的time模塊中的常用方法整理

    這篇文章主要介紹了Python的time模塊中的常用方法整理,time模塊是專門用于處理日期時(shí)間的模塊,需要的朋友可以參考下
    2015-06-06
  • python 中文亂碼問(wèn)題深入分析

    python 中文亂碼問(wèn)題深入分析

    一直以來(lái),python中的中文編碼就是一個(gè)極為頭大的問(wèn)題,經(jīng)常拋出編碼轉(zhuǎn)換的異常,python中的str和unicode到底是一個(gè)什么東西呢?
    2011-03-03
  • Python中關(guān)于面向?qū)ο笾欣^承的詳細(xì)講解

    Python中關(guān)于面向?qū)ο笾欣^承的詳細(xì)講解

    面向?qū)ο缶幊?(OOP) 語(yǔ)言的一個(gè)主要功能就是“繼承”。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無(wú)需重新編寫原來(lái)的類的情況下對(duì)這些功能進(jìn)行擴(kuò)展
    2021-10-10
  • 一文秒懂pandas中iloc()函數(shù)

    一文秒懂pandas中iloc()函數(shù)

    iloc[]函數(shù)屬于pandas庫(kù)全稱為index?location,即對(duì)數(shù)據(jù)進(jìn)行位置索引,從而在數(shù)據(jù)表中提取出相應(yīng)的數(shù)據(jù),本文通過(guò)實(shí)例代碼介紹pandas中iloc()函數(shù),感興趣的朋友一起看看吧
    2023-04-04
  • Python中XlsxWriter模塊簡(jiǎn)介與用法分析

    Python中XlsxWriter模塊簡(jiǎn)介與用法分析

    這篇文章主要介紹了Python中XlsxWriter模塊用法,簡(jiǎn)單描述了XlsxWriter模塊的功能并結(jié)合實(shí)例形式分析了Python使用XlsxWriter模塊操作xls文件的數(shù)據(jù)插入、直方圖等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • pycharm下載依賴一直失敗的問(wèn)題踩坑指南

    pycharm下載依賴一直失敗的問(wèn)題踩坑指南

    在使用pycharm學(xué)習(xí)python的時(shí)候,經(jīng)常需要第三方庫(kù),沒(méi)有第三方庫(kù)程序就會(huì)報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于pycharm下載依賴一直失敗的問(wèn)題踩坑指南,需要的朋友可以參考下
    2023-06-06
  • python求平均數(shù)、方差、中位數(shù)的例子

    python求平均數(shù)、方差、中位數(shù)的例子

    今天小編就為大家分享一篇python求平均數(shù)、方差、中位數(shù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08

最新評(píng)論

乐陵市| 新津县| 全南县| 富川| 黄骅市| 密云县| 通辽市| 类乌齐县| 郁南县| 余江县| 壤塘县| 日土县| 襄垣县| 周口市| 岑巩县| 马关县| 鄂托克前旗| 云南省| 贡觉县| 丘北县| 萨嘎县| 泽普县| 高尔夫| 濮阳市| 镇江市| 逊克县| 昌图县| 赞皇县| 红河县| 浦江县| 北票市| 姚安县| 洪泽县| 武川县| 玉屏| 宜兰市| 旬阳县| 白城市| 马公市| 台前县| 金塔县|