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

Python多進(jìn)程Process和管道Pipe的使用方式

 更新時(shí)間:2024年02月10日 09:35:35   作者:AllardZhao  
這篇文章主要介紹了Python多進(jìn)程Process和管道Pipe的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何使用多線程?

實(shí)際案例

由于python中全局解釋器鎖(GIL)的存在,在任意時(shí)刻只允許一個(gè)線程在解釋器中運(yùn)行。

因此python的多線程不適合處理cpu密集型的任務(wù)。

想要處理cpu密集型的任務(wù),可以使用多進(jìn)程模型。

解決方案

使用標(biāo)準(zhǔn)庫(kù)中multiprocessing.Process,它可以啟動(dòng)子進(jìn)程執(zhí)行任務(wù),操作接口,進(jìn)程間通信,進(jìn)程間同步等,都與Threading.Thread類似。

代碼演示

(1)進(jìn)程簡(jiǎn)單使用

# _*_ encoding:utf-8 _*_
from multiprocessing import Process
 
 
# 定義需要子進(jìn)程執(zhí)行函數(shù)
def f(s):
    print(s)
 
 
# 創(chuàng)建一個(gè)全局變量
x = 1
 
 
# 在f2函數(shù)內(nèi)部修改全局變量的值
def f2():
    # 使用global聲明x,然后再修改成5
    global x
    x = 5
 
 
if __name__ == '__main__':
    # 創(chuàng)建子進(jìn)程執(zhí)行函數(shù)
    p = Process(target=f, args=('hello',))
    # 啟動(dòng)子進(jìn)程
    p.start()
    # 等待一個(gè)進(jìn)程結(jié)束
    p.join()
    '''
    和多線程不一樣的是多個(gè)進(jìn)程之間他們使用的虛擬地址空間是獨(dú)立的。
    '''
    # 在本進(jìn)程中調(diào)用f2,然后查看x發(fā)現(xiàn)變成了5
    f2()
    print(x)
    # 將x再修改回去,啟動(dòng)子進(jìn)程修改
    x = 1
    p1 = Process(target=f2)
    p1.start()
    # 在主進(jìn)程當(dāng)中查看x是1還是5
    print(x)
    # 發(fā)現(xiàn)x=1,說(shuō)明子進(jìn)程和主進(jìn)程他們看到的,x不是同一個(gè)x他們分別是獨(dú)立的
    # 既然進(jìn)程之間無(wú)法訪問(wèn)彼此的地址空間,進(jìn)程之間如何通信

(2)Queue隊(duì)列和Pipe管道的簡(jiǎn)單使用

# _*_ encoding:utf-8 _*_
from multiprocessing import set_start_method
# 導(dǎo)入進(jìn)程、隊(duì)列和管道
from multiprocessing import Process, Queue, Pipe
 
# 注意Queue和queue.Queue并不是同一個(gè)對(duì)象
q = Queue()
q.put(1)
print(q.get())
 
 
def f(q1):
    print('start')
    # 等待主進(jìn)程傳入一個(gè)值
    print(q1.get())
    print('end')
 
 
# Pipe會(huì)創(chuàng)建雙向的管道
c1, c2 = Pipe()
# 向管道的c1端傳入數(shù)據(jù),在c2端讀取出來(lái)
c1.send('abc')
print(c2.recv())
# c2端寫(xiě)入的,從c1端讀取出來(lái)
c2.send('xyz')
print(c1.recv())
 
 
def f2(c):
    # 從連接中讀取數(shù)據(jù),然后乘2再寫(xiě)回去
    c.send(c.recv() * 2)
 
 
if __name__ == '__main__':
    '''
    set_start_method為創(chuàng)建進(jìn)程的方式:
        fork為分支創(chuàng)建,spawn為分產(chǎn)創(chuàng)建。
    '''
    set_start_method('fork', True)
    # ------------------------------
    q2 = Queue()
    # 啟動(dòng)一個(gè)子進(jìn)程直接運(yùn)行
    Process(target=f, args=(q2,)).start()
    # 子進(jìn)程阻塞到get,等待傳入一個(gè)值
    q2.put(100)
    # ------------------------------
    c3, c4 = Pipe()
    # 子進(jìn)程會(huì)等待向管道寫(xiě)
    Process(target=f2, args=(c4,)).start()
    # 從c3端寫(xiě)入數(shù)據(jù),然后函數(shù)回返回回來(lái),再在c3端讀取
    c3.send(55)
    print(c3.recv())

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中處理表格數(shù)據(jù)的Tablib庫(kù)詳解

    Python中處理表格數(shù)據(jù)的Tablib庫(kù)詳解

    這篇文章主要介紹了Python中處理表格數(shù)據(jù)的Tablib庫(kù)詳解,Tablib 是一個(gè) MIT 許可的格式不可知的表格數(shù)據(jù)集庫(kù),用 Python 編寫(xiě),它允許您導(dǎo)入、導(dǎo)出和操作表格數(shù)據(jù)集,需要的朋友可以參考下
    2023-08-08
  • python self,cls,decorator的理解

    python self,cls,decorator的理解

    在python里面,self, cls 不是關(guān)鍵字,完全可以使用自己寫(xiě)的任意變量代替實(shí)現(xiàn)一樣的效果
    2009-07-07
  • python查找目錄下指定擴(kuò)展名的文件實(shí)例

    python查找目錄下指定擴(kuò)展名的文件實(shí)例

    這篇文章主要介紹了python查找目錄下指定擴(kuò)展名的文件,實(shí)例分析了Python文件查詢的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Python字典的基礎(chǔ)操作

    Python字典的基礎(chǔ)操作

    這篇文章主要介紹了Python字典的基礎(chǔ)操作,Python中的字典數(shù)據(jù)類型和現(xiàn)實(shí)中的字典很像,它是以鍵值對(duì)(鍵和值的組合)的方式把數(shù)據(jù)組織到一起,可以通過(guò)鍵找到與之對(duì)應(yīng)的值并進(jìn)行操作,下面來(lái)看文章金額提內(nèi)容吧,需要的朋友可以參考一下
    2021-11-11
  • Python簡(jiǎn)單爬蟲(chóng)導(dǎo)出CSV文件的實(shí)例講解

    Python簡(jiǎn)單爬蟲(chóng)導(dǎo)出CSV文件的實(shí)例講解

    今天小編就為大家分享一篇Python簡(jiǎn)單爬蟲(chóng)導(dǎo)出CSV文件的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python網(wǎng)絡(luò)爬蟲(chóng)之獲取網(wǎng)絡(luò)數(shù)據(jù)

    Python網(wǎng)絡(luò)爬蟲(chóng)之獲取網(wǎng)絡(luò)數(shù)據(jù)

    本文介紹了Python中用于獲取網(wǎng)絡(luò)數(shù)據(jù)的重要工具之一——Requests庫(kù),詳細(xì)講解了Requests庫(kù)的基本使用方法、請(qǐng)求方法、請(qǐng)求頭、請(qǐng)求參數(shù)、Cookies、Session等內(nèi)容,并結(jié)合實(shí)例代碼展示了Requests庫(kù)的應(yīng)用場(chǎng)景
    2023-04-04
  • Python測(cè)試框架pytest高階用法全面詳解

    Python測(cè)試框架pytest高階用法全面詳解

    這篇文章主要為大家介紹了Python測(cè)試框架pytest高階用法全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python格式化輸出詳情

    Python格式化輸出詳情

    這篇文章介紹了Python格式化輸出,主要講解Python格式化輸出的三種方式:%格式化、format格式化、f-String格式化,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • python庫(kù)使用Fire庫(kù)生成命令行參數(shù)

    python庫(kù)使用Fire庫(kù)生成命令行參數(shù)

    Python Fire是一個(gè)開(kāi)源庫(kù),能把Python對(duì)象轉(zhuǎn)換為命令行界面,F(xiàn)ire庫(kù)是一個(gè)非常有用的工具,它可以幫助開(kāi)發(fā)人員創(chuàng)建命令行界面,并且可以將任何Python對(duì)象轉(zhuǎn)換為命令行界面,這篇文章主要介紹了python庫(kù)使用Fire庫(kù)生成命令行參數(shù),需要的朋友可以參考下
    2024-02-02
  • Django實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    Django實(shí)現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Django實(shí)現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02

最新評(píng)論