【Python進階】近200頁md文檔14大體系第4篇:Python進程使用詳解(圖文演示)

本文從14大模塊展示了python高級用的應用。分別有Linux命令,多任務編程、網絡編程、Http協議和靜態Web編程、html+css、JavaScript、jQuery、MySql數據庫的各種用法、python的閉包和裝飾器、mini-web框架、正則表達式等相關文章的詳細講述。

Python全套筆記直接地址: 請移步這里


共 14 章,157 子模塊


進程

學習目標

  • 能夠知道進程的作用

1. 進程的介紹

在Python程序中,想要實現多任務可以使用進程來完成,進程是實現多任務的一種方式。

2. 進程的概念

一個正在運行的程序或者軟件就是一個進程,它是操作系統進行資源分配的基本單位,也就是說每啟動一個進程,操作系統都會給其分配一定的運行資源(內存資源)保證進程的運行。

比如:現實生活中的公司可以理解成是一個進程,公司提供辦公資源(電腦、辦公桌椅等),真正干活的是員工,員工可以理解成線程。

注意:

一個程序運行后至少有一個進程,一個進程默認有一個線程,進程里面可以創建多個線程,線程是依附在進程里面的,沒有進程就沒有線程

3. 進程的作用

單進程效果圖:

進程

多進程效果圖:

進程

說明:

多進程可以完成多任務,每個進程就好比一家獨立的公司,每個公司都各自在運營,每個進程也各自在運行,執行各自的任務。

4. 小結

  • 進程是操作系統進行資源分配的基本單位。
  • 進程是Python程序中實現多任務的一種方式

多進程的使用

學習目標

  • 能夠使用多進程完成多任務

1 導入進程包

  #導入進程包import multiprocessing

2. Process進程類的說明

Process([group [, target [, name [, args [, kwargs]]]]])

  • group:指定進程組,目前只能使用None
  • target:執行的目標任務名
  • name:進程名字
  • args:以元組方式給執行任務傳參
  • kwargs:以字典方式給執行任務傳參

Process創建的實例對象的常用方法:

  • start():啟動子進程實例(創建子進程)
  • join():等待子進程執行結束
  • terminate():不管任務是否完成,立即終止子進程

Process創建的實例對象的常用屬性:

name:當前進程的別名,默認為Process-N,N為從1開始遞增的整數

3. 多進程完成多任務的代碼

import multiprocessing
import time# 跳舞任務def dance():for i in range(5):print("跳舞中...")time.sleep(0.2)# 唱歌任務def sing():for i in range(5):print("唱歌中...")time.sleep(0.2)if __name__ == '__main__':# 創建跳舞的子進程# group: 表示進程組,目前只能使用None# target: 表示執行的目標任務名(函數名、方法名)# name: 進程名稱, 默認是Process-1, .....dance_process = multiprocessing.Process(target=dance, name="myprocess1")sing_process = multiprocessing.Process(target=sing)# 啟動子進程執行對應的任務dance_process.start()sing_process.start()

執行結果:

唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...
唱歌中...
跳舞中...

4. 小結

  1. 導入進程包

    • import multiprocessing
  2. 創建子進程并指定執行的任務

    • sub_process = multiprocessing.Process (target=任務名)
  3. 啟動進程執行任務

    • sub_process.start()

進程編號

學習目標

  • 能夠知道如果進程編號

1. 進程編號的目的

進程編號的目的是驗證主進程和子進程的關系,可以得知子進程是由那個主進程創建出來的。

進程編號的兩種操作

  • 當前進程編號
  • 當前父進程編號

2. 當前進程編號

os.getpid() 表示當前進程編號

示例代碼:

import multiprocessing
import time
import os# 跳舞任務def dance():# 當前進程的編號print("dance:", os.getpid())# 當前進程print("dance:", multiprocessing.current_process())for i in range(5):print("跳舞中...")time.sleep(0.2)# 擴展:根據進程編號殺死指定進程os.kill(os.getpid(), 9)# 唱歌任務def sing():# 當前進程的編號print("sing:", os.getpid())# 當前進程print("sing:", multiprocessing.current_process())for i in range(5):print("唱歌中...")time.sleep(0.2)if __name__ == '__main__':# 當前進程的編號print("main:", os.getpid())# 當前進程print("main:", multiprocessing.current_process())# 創建跳舞的子進程# group: 表示進程組,目前只能使用None# target: 表示執行的目標任務名(函數名、方法名)# name: 進程名稱, 默認是Process-1, .....dance_process = multiprocessing.Process(target=dance, name="myprocess1")sing_process = multiprocessing.Process(target=sing)# 啟動子進程執行對應的任務dance_process.start()sing_process.start()

執行結果:

main: 70763
main: <_MainProcess(MainProcess, started)>
dance: 70768
dance: <Process(myprocess1, started)>
跳舞中...
sing: 70769
sing: <Process(Process-2, started)>
唱歌中...
唱歌中...
唱歌中...
唱歌中...
唱歌中...

3. 當前父進程編號

os.getppid() 表示當前父進程編號

示例代碼:

import multiprocessing
import time
import os# 跳舞任務def dance():# 當前進程的編號print("dance:", os.getpid())# 當前進程print("dance:", multiprocessing.current_process())# 父進程的編號print("dance的父進程編號:", os.getppid())for i in range(5):print("跳舞中...")time.sleep(0.2)# 擴展:根據進程編號殺死指定進程os.kill(os.getpid(), 9)# 唱歌任務def sing():# 當前進程的編號print("sing:", os.getpid())# 當前進程print("sing:", multiprocessing.current_process())# 父進程的編號print("sing的父進程編號:", os.getppid())for i in range(5):print("唱歌中...")time.sleep(0.2)if __name__ == '__main__':# 當前進程的編號print("main:", os.getpid())# 當前進程print("main:", multiprocessing.current_process())# 創建跳舞的子進程# group: 表示進程組,目前只能使用None# target: 表示執行的目標任務名(函數名、方法名)# name: 進程名稱, 默認是Process-1, .....dance_process = multiprocessing.Process(target=dance, name="myprocess1")sing_process = multiprocessing.Process(target=sing)# 啟動子進程執行對應的任務dance_process.start()sing_process.start()
main: 70860
main: <_MainProcess(MainProcess, started)>
dance: 70861
dance: <Process(myprocess1, started)>
dance的父進程編號: 70860
跳舞中...
sing: 70862
sing: <Process(Process-2, started)>
sing的父進程編號: 70860
唱歌中...
唱歌中...
唱歌中...
唱歌中...
唱歌中...

4. 小結

  • 當前進程編號

    • os.getpid()
  • 當前父進程編號

    • os.getppid()
  • 進程編號可以查看父子進程的關系

進程執行帶有參數的任務

學習目標

  • 能夠寫出進程執行帶有參數的任務

1. 進程執行帶有參數的任務的介紹

前面我們使用進程執行的任務是沒有參數的,假如我們使用進程執行的任務帶有參數,如何給函數傳參呢?

Process類執行任務并給任務傳參數有兩種方式:

  • args 表示以元組的方式給執行任務傳參
  • kwargs 表示以字典方式給執行任務傳參

2. args參數的使用

示例代碼:

import multiprocessing
import time# 帶有參數的任務def task(count):for i in range(count):print("任務執行中..")time.sleep(0.2)else:print("任務執行完成")if __name__ == '__main__':# 創建子進程# args: 以元組的方式給任務傳入參數sub_process = multiprocessing.Process(target=task, args=(5,))sub_process.start()

執行結果:

任務執行中..
任務執行中..
任務執行中..
任務執行中..
任務執行中..
任務執行完成

3. kwargs參數的使用

示例代碼:

import multiprocessing
import time# 帶有參數的任務def task(count):for i in range(count):print("任務執行中..")time.sleep(0.2)else:print("任務執行完成")if __name__ == '__main__':# 創建子進程# kwargs: 表示以字典方式傳入參數sub_process = multiprocessing.Process(target=task, kwargs={"count": 3})sub_process.start()

執行結果:

任務執行中..
任務執行中..
任務執行中..
任務執行完成

4. 小結

  • 進程執行任務并傳參有兩種方式:

    • 元組方式傳參(args): 元組方式傳參一定要和參數的順序保持一致。
    • 字典方式傳參(kwargs): 字典方式傳參字典中的key一定要和參數名保持一致。

未完待續 下一期下一章

全套筆記直接地址: 請移步這里

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/160609.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160609.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160609.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PostgreSQL10安裝postgis插件

1.安裝pgsql10 2.下載插件&#xff0c;以Windows為例&#xff0c;地址&#xff1a;Index of /postgis/windows/pg10/ 3.安裝插件&#xff0c;直接安裝&#xff0c;和pgsql的目錄相同即可&#xff0c;一直下一步 4.安裝之后&#xff0c;需要執行sql打開 CREATE EXTENSION po…

028 - STM32學習筆記 - ADC結構體學習(二)

028 - STM32學習筆記 - 結構體學習&#xff08;二&#xff09; 上節對ADC基礎知識進行了學習&#xff0c;這節在了解一下ADC相關的結構體。 一、ADC初始化結構體 在標準庫函數中基本上對于外設都有一個初始化結構體xx_InitTypeDef&#xff08;其中xx為外設名&#xff0c;例如…

Redis設計與實現-數據結構(建設進度17%)

Redis數據結構 引言數據結構stringSDS數據結構原生string的不足 hash 本博客基于《Redis設計與實現》進行整理和補充&#xff0c;該書依賴于Redis 3.0版本&#xff0c;但是Redis6.0版本在一些底層實現上仍然沒有明顯的變動&#xff0c;因此本文將在該書的基礎上&#xff0c;對于…

PostgreSQL基本操作

1.查詢某個表的所在磁盤大小 select pg_size_pretty(pg_relation_size(grb_grid)); 2.插入point類型的記錄 insert into tb_person ("name", "address", "location", "create_time", "area", "girls") values …

Java 兩個線程交替打印1-100

線程題&#xff1a;交替打印1-100 這里演示兩個線程&#xff0c;一個打印奇數&#xff0c;一個打印偶數 方式一&#xff1a;synchronized FixedThreadPool public class example {private static int count 1;private static final Object lock new Object();public stat…

WPF基礎DataGrid控件

WPF DataGrid 是一個用于顯示和編輯表格數據的強大控件。它提供了豐富的功能&#xff0c;包括排序、篩選、分組、編輯、選擇等&#xff0c;使你能夠以類似電子表格的方式呈現和操作數據。 DataGrid 的布局主要由以下部分組成&#xff1a; 列定義 (Columns): DataGrid 列定義了…

YOLO目標檢測——衛星遙感多類別檢測數據集下載分享【含對應voc、coco和yolo三種格式標簽】

實際項目應用&#xff1a;衛星遙感目標檢測數據集說明&#xff1a;衛星遙感多類別檢測數據集&#xff0c;真實場景的高質量圖片數據&#xff0c;數據場景豐富&#xff0c;含網球場、棒球場、籃球場、田徑場、儲罐、車輛、橋、飛機、船等類別標簽說明&#xff1a;使用lableimg標…

2023年【上海市安全員C證】考試及上海市安全員C證找解析

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2023年上海市安全員C證考試為正在備考上海市安全員C證操作證的學員準備的理論考試專題&#xff0c;每個月更新的上海市安全員C證找解析祝您順利通過上海市安全員C證考試。 1、【多選題】2017年9月頒發的《中共上海市委…

基于STM32的煙霧濃度檢測報警仿真設計(仿真+程序+講解視頻)

這里寫目錄標題 &#x1f4d1;1.主要功能&#x1f4d1;2.仿真&#x1f4d1;3. 程序&#x1f4d1;4. 資料清單&下載鏈接&#x1f4d1;[資料下載鏈接](https://docs.qq.com/doc/DS0VHTmxmUHBtVGVP) 基于STM32的煙霧濃度檢測報警仿真設計(仿真程序講解&#xff09; 仿真圖prot…

【數據結構】B : DS圖應用--最短路徑

B : DS圖應用–最短路徑 文章目錄 B : DS圖應用--最短路徑DescriptionInputOutputSampleInput Output 解題思路&#xff1a;初始化主循環心得&#xff1a; AC代碼 Description 給出一個圖的鄰接矩陣&#xff0c;再給出指定頂點v0&#xff0c;求頂點v0到其他頂點的最短路徑 In…

SkyWalking配置報警推送到企業微信

1、先在企業微信群里創建一個機器人&#xff0c;復制webhook的地址&#xff1a; 2、找到SkyWalking部署位置的alarm-settings.yml文件 編輯&#xff0c;在最后面加上此段配置 &#xff01;&#xff01;&#xff01;一定格式要對&#xff0c;不然一直報警報不出來按照網上指導…

JVM 堆外內存詳解

Java 進程內存占用除了JVM 運行時數據區&#xff0c;還有直接內存&#xff08;Direct Memory&#xff09;區域及 JVM 程序自身也會占用內存 直接內存&#xff08;Direct Memory&#xff09;區域&#xff1a;直接內存通過使用Native堆外內存來存儲數據&#xff0c;這意味著數據…

大數據平臺實踐之CDH6.2.1+spark3.3.0+kyuubi-1.6.0

前言&#xff1a;關于kyuubi的原理和功能這里不做詳細的介紹&#xff0c;感興趣的同學可以直通官網&#xff1a;https://kyuubi.readthedocs.io/en/v1.7.1-rc0/index.html 下載軟件版本 wget http://distfiles.macports.org/scala2.12/scala-2.12.16.tgz wget https://archi…

pikachu_php反序列化

pikachu_php反序列化 源代碼 class S{var $test "pikachu";function __construct(){echo $this->test;} }//O:1:"S":1:{s:4:"test";s:29:"<script>alert(xss)</script>";} $html; if(isset($_POST[o])){$s $_POST[…

基于python人臉性別年齡檢測系統-深度學習項目

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介簡介技術組成1. OpenCV2. Dlib3. TensorFlow 和 Keras 功能流程 二、功能三、系統四. 總結 一項目簡介 # Python 人臉性別年齡檢測系統介紹 簡介 該系統基…

用idea搭建一個spring cloud微服務項目

以下是使用 IntelliJ IDEA 搭建 Spring Cloud 微服務項目的步驟&#xff1a; 創建一個新的 Maven 項目。 在 pom.xml 文件中添加以下依賴&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-…

Android studio 遷移之后打開沒反應

把Android studio由d盤遷移到c盤&#xff0c;點擊沒反應&#xff1b; 需要把C:\Users\xxxx\AppData\Roaming\Google\AndroidStudio2022.3 目錄下的studio64.exe.vmoptions 修改為C:&#xff0c;刪除該文件會導致無法安裝app。 里面配置了一個

SpringMVC問題

文章目錄 SpringMVC運行流程MVC的概念與請求在MVC中的執行路徑&#xff0c;ResponsBody注解的用途SpringMVC啟動流程 SpringMVC運行流程 ? 客戶端&#xff08;瀏覽器&#xff09;發送請求&#xff0c;直接請求到 DispatcherServlet 。 ? DispatcherServlet 根據請求信息調用 …

SpringBoot問題

文章目錄 Springboot特性 Springboot特性 自動裝配&#xff1a;提供自動配置的“starter”項目對象模型&#xff08;POMS&#xff09;以簡化Maven配置。比如使用 MongoDB 時&#xff0c;只需加入 MongoDB 的 Starter 包&#xff0c;然后配置 的連接信息&#xff0c;就可以直接使…

【React-Router】路由導航

1. 概念 路由系統中的多個路由之間需要進行路由跳轉&#xff0c;并且在跳轉的同時有可能需要傳遞參數進行通信。 2. 聲明式導航 // /page/Login/index.jsimport { Link } from react-router-dom const Login () > {return <div>登錄頁{/* 解析成 a 鏈接 */}<Li…