国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python多進程編程常用到的方法

這篇具有很好參考價值的文章主要介紹了python多進程編程常用到的方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

python中的多線程其實并不是真正的多線程,如果想要充分地使用多核CPU資源,在python中大部分情況需要使用多進程。

python提供了非常好用的多進程包Multiprocessing,只需要定義一個函數(shù),python會完成其它所有事情。借助這個包,可以輕松完成從單進程到并發(fā)執(zhí)行的轉(zhuǎn)換。

multiprocessing支持子進程、通信和共享數(shù)據(jù)、執(zhí)行不同形式的同步,提供了Process、Queue、Pipe、LocK等組件

一、Process

語法:Process([group[,target[,name[,args[,kwargs]]]]])

參數(shù)含義:target表示調(diào)用對象;args表示調(diào)用對象的位置參數(shù)元祖;kwargs表示調(diào)用對象的字典。name為別名,groups實際上不會調(diào)用。

方法:

is_alive():
join(timeout):
run():
start():
terminate():

屬性:authkey、daemon(要通過start()設(shè)置)、exitcode(進程在運行時為None、如果為-N,表示被信號N結(jié)束)、name、pid。其中daemon是父進程終止后自動終止,且自己不能產(chǎn)生新的進程,必須在start()之前設(shè)置。

1.創(chuàng)建函數(shù),并將其作為單個進程

from multiprocessing import Process
def func(name):
    print("%s曾經(jīng)是好人"%name)

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.start()   #start()通知系統(tǒng)開啟這個進程

2.創(chuàng)建函數(shù)并將其作為多個進程

from multiprocessing import Process
import random,time

def hobby_motion(name):
    print('%s喜歡運動'% name)
    time.sleep(random.randint(1,3))

def hobby_game(name):
    print('%s喜歡游戲'% name)
    time.sleep(random.randint(1,3))

if __name__ == "__main__":
    p1 = Process(target=hobby_motion,args=('小明',))
    p2 = Process(target=hobby_game,args=('張三',))
    p1.start()
    p2.start()

執(zhí)行結(jié)果:

小明喜歡運動
張三喜歡游戲

3.將進程定義為類(開啟進程的另一種方法,并不是很常用)

from multiprocessing import Process
class MyProcess(Process):
    def __init__(self,name):
        super().__init__()
        self.name = name

    def run(self):  #start()時,run自動調(diào)用,而且此處只能定義為run。
        print("%s曾經(jīng)是好人"%self.name)

if __name__ == "__main__":
    p = MyProcess('kebi')
    p.start()  #將Process當(dāng)作父類,并且自定義一個函數(shù)。

4.daemon程序?qū)Ρ刃Ч?/h4>

不加daemon屬性

import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.start()
    print("this is over")

#執(zhí)行結(jié)果
this is over
work start:Thu Nov 30 16:12:00 2017
work end:Thu Nov 30 16:12:02 2017

加上daemon屬性

from multiprocessing import Process
import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.daemon = True   #父進程終止后自動終止,不能產(chǎn)生新進程,必須在start()之前設(shè)置
    p.start()
    print("this is over")

#執(zhí)行結(jié)果
this is over

設(shè)置了daemon屬性又想執(zhí)行完的方法:

import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.daemon = True
    p.start()
    p.join()  #執(zhí)行完前面的代碼再執(zhí)行后面的
    print("this is over")

#執(zhí)行結(jié)果
work start:Thu Nov 30 16:18:39 2017
work end:Thu Nov 30 16:18:41 2017
this is over

5.join():上面的代碼執(zhí)行完畢之后,才會執(zhí)行后i面的代碼。

先看一個例子:

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p1.start()
    p2.start()
    print("this is over")

執(zhí)行結(jié)果:
this is over   #最后執(zhí)行,最先打印,說明start()只是開啟進程,并不是說一定要執(zhí)行完
A lifelong friend:kebi,12048
A lifelong friend:maoxian,8252
A lifelong friend:xiaoniao,6068
Good bother:maoxian   #最先打印,第二位執(zhí)行
Good bother:kebi     
Good bother:xiaoniao

添加join()

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)
start = time.time()
if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p.join()   #上面的代碼執(zhí)行完畢之后,再執(zhí)行后面的
    p1.start()
    p1.join()
    p2.start()
    p2.join()
    print("this is over")
    print(time.time() - start)

#執(zhí)行結(jié)果
A lifelong friend:kebi,14804
Good bother:kebi
A lifelong friend:maoxian,11120
Good bother:maoxian
A lifelong friend:xiaoniao,10252  #每個進程執(zhí)行完了,才會執(zhí)行下一個
Good bother:xiaoniao
this is over
6.497815370559692   #2+1+3+主程序執(zhí)行時間

改變一下位置文章來源地址http://www.zghlxwxcb.cn/news/detail-624217.html

from multiprocessing import Process
import time,os,random
def func(name,hour):
    print("A lifelong friend:%s,%s"% (name,os.getpid()))
    time.sleep(hour)
    print("Good bother:%s"%name)
start = time.time()
if __name__ == "__main__":
    p = Process(target=func,args=('kebi',2))
    p1 = Process(target=func,args=('maoxian',1))
    p2 = Process(target=func,args=('xiaoniao',3))
    p.start()
    p1.start()
    p2.start()
    p.join()   #需要2秒
    p1.join()  #到這時已經(jīng)執(zhí)行完
    p2.join()   #已經(jīng)執(zhí)行了2秒,還要1秒
    print("this is over")
    print(time.time() - start)

#執(zhí)行結(jié)果
#Python小白學(xué)習(xí)交流群:711312441
A lifelong friend:kebi,13520
A lifelong friend:maoxian,11612
A lifelong friend:xiaoniao,17064  #幾乎是同時開啟執(zhí)行
Good bother:maoxian
Good bother:kebi
Good bother:xiaoniao
this is over
3.273620367050171  #以最長時間的為主

6.其它屬性和方法

from multiprocessing import Process
import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    p.start()
    p.terminate()  #將進程殺死,而且必須放在start()后面,與daemon的功能類似

#執(zhí)行結(jié)果
this is over
from multiprocessing import Process
import time
def func(name):
    print("work start:%s"% time.ctime())
    time.sleep(2)
    print("work end:%s"% time.ctime())

if __name__ == "__main__":
    p = Process(target=func,args=('kebi',))
    # p.daemon = True
    print(p.is_alive())
    p.start()
    print(p.name)   #獲取進程的名字
    print(p.pid)    #獲取進程的pid
    print(p.is_alive())  #判斷進程是否存在
    print("this is over")

到了這里,關(guān)于python多進程編程常用到的方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • python多進程編程(模式與鎖)

    python多進程編程(模式與鎖)

    fork,【拷貝幾乎所有資源】【支持文件對象/線程鎖等傳參】【unix】【任意位置開始】【快】 spawn,【run參數(shù)傳參必備資源】【不支持文件對象/線程鎖等傳參】【unix、win】【main代碼塊開始】【慢】 forkserver,【run參數(shù)傳必備資源】【不支持文件對象/線程鎖傳參】【部分uni

    2024年02月15日
    瀏覽(11)
  • python-16-線程池和進程池python并發(fā)編程

    python-16-線程池和進程池python并發(fā)編程

    Python ThreadPoolExecutor線程池 線程池的基本原理是什么? 利用Python快速實現(xiàn)一個線程池,非常簡單 Python并發(fā)編程專題 一、為什么要引入并發(fā)編程? 場景1:一個網(wǎng)絡(luò)爬蟲,按順序爬取花了1小時,采用并發(fā)下載減少到20分鐘! 場景2:一個APP應(yīng)用,優(yōu)化前每次打開頁面需要3秒,采

    2024年02月04日
    瀏覽(43)
  • 《Linux操作系統(tǒng)編程》 第六章 Linux中的進程監(jiān)控: fork函數(shù)的使用,以及父子進程間的關(guān)系,掌握exec系列函數(shù)

    《Linux操作系統(tǒng)編程》 第六章 Linux中的進程監(jiān)控: fork函數(shù)的使用,以及父子進程間的關(guān)系,掌握exec系列函數(shù)

    ???? 博主 libin9iOak帶您 Go to New World.??? ?? 個人主頁——libin9iOak的博客?? ?? 《面試題大全》 文章圖文并茂??生動形象??簡單易學(xué)!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍》學(xué)會IDEA常用操作,工作效率翻倍~?? ???? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬

    2024年02月11日
    瀏覽(29)
  • Python滲透測試編程基礎(chǔ)——線程、進程與協(xié)程

    Python滲透測試編程基礎(chǔ)——線程、進程與協(xié)程

    目錄 ?一、進程與線程的概念 1.進程 2.線程 3.進程和線程的關(guān)系 4.任務(wù)執(zhí)行方式 二、Python中的Threading模塊 1.線程模塊介紹 2.Threading介紹 (1)方法和屬性 (2)類方法 三、線程簡單編寫 1.流程 2.創(chuàng)建線程 (1)方法一 (2)方法二 3.例子 四、守護線程 五、線程同步技術(shù) 1.線程

    2024年02月01日
    瀏覽(25)
  • Python標(biāo)準(zhǔn)庫 subprocess 模塊多進程編程詳解

    Python標(biāo)準(zhǔn)庫 subprocess 模塊多進程編程詳解

    subprocess 模塊,允許生成新的進程執(zhí)行命令行指令,python程序,以及其它語言編寫的應(yīng)用程序, 如 java, c++,rust 應(yīng)用等。 subprocess可連接多個進程的輸入、輸出、錯誤管道,并且獲取它們的返回碼。 asyncio也支持subprocess. 許多知名庫都在使用此模塊創(chuàng)建進程,以及做為跨語言粘合

    2024年02月02日
    瀏覽(22)
  • 由淺入深走進Python異步編程【多進程】(含代碼實例講解 || multiprocessing、異步進程池、進程通信)

    由淺入深走進Python異步編程【多進程】(含代碼實例講解 || multiprocessing、異步進程池、進程通信)

    從底層到第三方庫,全面講解python的異步編程。這節(jié)講述的是python的多線程實現(xiàn),純干貨,無概念,代碼實例講解。 本系列有6章左右,點擊頭像或者專欄查看更多內(nèi)容,陸續(xù)更新,歡迎關(guān)注。 部分資料來源及參考鏈接: https://www.bilibili.com/video/BV1Li4y1j7RY/ 現(xiàn)在讓我們初步進入

    2024年02月03日
    瀏覽(27)
  • 【Python】多線程編程 ① ( 線程相關(guān)概念 | 進程 | 線程 | 協(xié)程 / 纖程 | 管程 )

    進程 與 操作系統(tǒng) : 進程 是 操作系統(tǒng) 中 能夠獨立運行的單元 , 是 操作系統(tǒng) 對 正在運行的 應(yīng)用程序 的 抽象結(jié)構(gòu) 描述 ; 操作系統(tǒng) 中 運行的每個 應(yīng)用程序 就是一個進程 ; 一個操作系統(tǒng)中可以運行 多個 進程 ; 每個 應(yīng)用程序 都會被 操作系統(tǒng) 分配一個 進程 ID ; 多個進程之間

    2024年02月15日
    瀏覽(25)
  • python進程池中的回調(diào)函數(shù)

    指定一個任務(wù)后、并且指定一個回調(diào)函數(shù)后,當(dāng)指定的進程池執(zhí)行的任務(wù)結(jié)束后,會將該任務(wù)的返回值作為回調(diào)函數(shù)的參數(shù)傳遞到回調(diào)函數(shù)中,并且回調(diào)函數(shù)得以執(zhí)行 回調(diào)函數(shù)在主進程中被執(zhí)行 10個任務(wù)func1投入到含有4個進程的進程池中異步執(zhí)行,并且指定回調(diào)函數(shù)為func2,

    2023年04月15日
    瀏覽(16)
  • < Python全景系列-5 > 解鎖Python并發(fā)編程:多線程和多進程的神秘面紗揭曉

    歡迎來到我們的系列博客《Python全景系列》!在這個系列中,我們將帶領(lǐng)你從Python的基礎(chǔ)知識開始,一步步深入到高級話題,幫助你掌握這門強大而靈活的編程語法。無論你是編程新手,還是有一定基礎(chǔ)的開發(fā)者,這個系列都將提供你需要的知識和技能。 ? 這是本系列的第五

    2024年02月05日
    瀏覽(21)
  • 一文詳解Python中多進程和進程池的使用方法

    這篇文章將介紹Python中多進程和進程池的使用方法,并提供一些實用的案例供大家參考,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下 目錄 Python是一種高級編程語言,它在眾多編程語言中,擁有極高的人氣和使用率。Python中的多進程和進程池是其強大的功能之一

    2023年04月24日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包