Python連載37-多進程、進程子類、進程父子id

来源:https://www.cnblogs.com/ruigege0000/archive/2019/09/13/11515703.html
-Advertisement-
Play Games

一、線程替代方案 1.subprocess (1)完全跳過線程,使用進程 (2)是派生進程的主要替代方案 (3)python2.4後引入 2.multiprocessing (1)使用threading介面派生,使用子進程 (2)允許為多核或者多CPU派生進程,介面很threading非常相似 (3 ...


一、線程替代方案

1.subprocess

(1)完全跳過線程,使用進程

(2)是派生進程的主要替代方案

(3)python2.4後引入

2.multiprocessing

(1)使用threading介面派生,使用子進程

(2)允許為多核或者多CPU派生進程,介面很threading非常相似

(3)python2.6

3.concurrent.futures

(1)新的非同步執行模塊

(2)人物級別的操作

(3)python3.2之後引入

4.多進程

(1)進程間通訊(InterprocessCommunication,IPC)

(2)進程之間無任何共用狀態

(3)進程的創建

i.直接生成Process實例對象,舉例

 

import multiprocessing

from time import sleep,ctime

def clock(interval):

    while True:

        print("The time is %s" % ctime())

        sleep(interval)

 

if __name__ == "__main__":

    p = multiprocessing.Process(target= clock,args=(2,))

    p.start()

    #從運行就可以看出來主進程已經結束了,但是子線程仍然在運行著

    #和我們之前講的線程,有一個最大區別就是線程在主進程裡面,主進程結束了,子線程就結束了

    #子線程從屬於進程,子進程與進程之間是併列關係

    #這裡的程式停止,是我手動停止的

ii.派生子類

 

舉例:重寫子類,和我們之前講的線程的差不多,這裡民重寫了最重要的兩個函數,一個是初始化子類,繼承父類的初始化,第二個就是運行函數

 

class ClockProcess(multiprocessing.Process):

    def __init__(self,interval):

        super().__init__()

        self.interval = interval

    def run(self):

        while True:

            print("The time is {0}".format(ctime()))

            sleep(self.interval)

if __name__ == "__main__":

    p2 = ClockProcess(2)

    p2.start()

iii.在os中查看pid,ppid以及他們的關係

 

def info(title):

    print(title)

    print("module name:",__name__)

    #得到父進程的id

    print("parent process:",os.getppid())

    #得到本身進程的id

    print("process id:",os.getpid())

def f(name):

    info("function f")

    print("hello",name)

if __name__ == "__main__":

    info("main line")

    print("==================================")

    p = multiprocessing.Process(target=f,args=("bob",))

    p.start()

    p.join()

 

解釋:先調用了一個函數,然後又調用了一個嵌套函數的函數  

四、源碼

d26_1_multiprocess_exercise.py

https://github.com/ruigege66/Python_learning/blob/master/d26_1_multiprocess_exercise.py

2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)

3.博客園:https://www.cnblogs.com/ruigege0000/

4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JSP三大指令 一個jsp頁面中,可以有0~N個指令的定義! 1. page --> 最複雜:<%@page language="java" info="xxx"...%> * pageEncoding和contentType: > pageEncoding:它指定當前jsp頁面的編碼,只要不說謊, ...
  • mutation是更改Vuex的store中的狀態的唯一方法,mutation類似於事件註冊,每個mutation都可以帶兩個參數,如下: state ;當前命名空間對應的state payload ;傳入的參數,一般是一個對象 創建Vuex.Store()倉庫實例時可以通過mutations創建每 ...
  • 【需求:】數據從競品網站爬過來,經過分析處理之後,把結果通過網頁實時反饋給業務人員。 【應用:】2個應用: 一個是爬取數據的應用:不斷從競品網站爬數據,每次爬到的數據為一批。然後,對每一批爬到的數據進行清洗和分析,生成唯一批次號(batch_no),將分析結果持久化入庫。 一個是展示頁面:實時刷新持 ...
  • 單例模式:對於類的單例模式設計,就是採取一定的方法保證在整個軟體系統中,對某個類只能存在一個對象實例,並且該類只提供一個取得其對象實例的方法(靜態方法)。 單例模式有8種方式: 1、餓漢式(靜態常量) // 2、餓漢式(靜態代碼塊) 3、懶漢式(線程不安全) 4、懶漢式(線程安全,同步方法) 5、懶 ...
  • 前言 今天講的是結構型設計模式中的最後一個,這個模式也就是代理模式,在前段時間我寫的一篇關於正向代理和反向代理的文章。雖說此代理非彼代理。但是代理一詞還是具有相似的含義的。這裡我們繼續使用文章中的代購一個例子來講述一下代理模式吧,人不方便去購買哪些物品,這時就有一個中間人,他來購買。他代替我去購買。 ...
  • 1.nfs實現的原理解析? 2.安裝、配置、nfs服務 1.安裝 2.配置 3.根據配置進行初始化環境 4.啟動 5.客戶端測試 6.錯誤的示範 7.多個客戶端共用一個存儲伺服器 (NFS) 8.實現開機自動掛載(因為伺服器不重啟) 擴展瞭解即可 3.nfs相關的配置參數 4.rw 和 ro 2.驗 ...
  • 如何界定爬蟲的合法性,我通過翻閱大量文章、事件、分享、司法案例,總結出界定的三個關鍵點 ...
  • 併發編程 併發(偽):由於執行速度特別快,人感覺不到 並行(真):創建10個人同時操作 線程 1. 單進程,單線程的應用程式 print('666') 2. 到底什麼是線程?什麼是進程 Python自己沒有這玩意,Python中調用的操作系統的線程和進程(偽線程) 3. 多線程 工作的最小單元 共用 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...