【python】[subprocess庫] 優雅的并發模板:并發,多進程管理與交互

需求

1> 創建多個進程,并發執行多個終端指令
2> 每個進程的進程號不同(以供記錄,并在異常退出時進行進程清理)
3> 每個子進程的輸出可被python變量記錄 (別問,就是想看)
4> 這些子進程的輸出不要顯示在終端上 (別問,就是不想看)

一套自用模板

進程創建

import subprocess #fork進程
import tempfile #臨時文件
child_process = [] #記錄所有子進程,以供清理
def sub_boot():command = 'your shell command'with tempfile.NamedTemporaryFile(delete=True) as temp_file:process = subprocess.Popen(command, shell=True,stdout=temp_file,  # write into temp_filestderr=sys.stdout, # output into you terminalprexxes_fn=os.setsid) # create new process-id # do anything you like with process,like recordchild_process.append(process)# because below process would not stop your main processprocess,wait() # 阻塞主進程,等待子進程結束with open(temp_file.name,'r') as file:txt = file.read()# after this line , the temp_file would be auto-deletedprint(txt)# do anything you like with txt sub_boot()

進程清理

import os
import signal
child_process = []
def sub_kill(process):main_pid = os.getpid() #獲得主進程的進程號try: #防止進程已經關閉導致的報錯pgid = os.getpgid(process.pid) #獲取進程idif pgid != main_pid: #防止殺死自己os.killpg(pgid,signal.SIGTERM) #這個信號相當于 ctrl+Cos.killpg(pgid,signal.SIGKILL) # 這個信號會強行殺死else:passexcept:passdef clean_all():for process in child_process:sub_kill(process)child_process=[]

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

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

相關文章

錯題集(c語言)

一、 #include <stdio.h> int main() {int x, y;for (x 30, y 0; x > 10, y<10; x--, y)x / 2, y 2;printf("x%d,y%d\n", x, y);return 0; }思路&#xff1a; 第一次循環開始前&#xff1a;x30&#xff0c;y0&#xff0c;結束&#xff1a;x15&#…

js算法面試題(附答案)

js算法面試題十道 兩數之和 題目&#xff1a;給定一個整數數組 nums 和一個目標值 target&#xff0c;請你在該數組中找出和為目標值的那兩個整數&#xff0c;并返回他們的數組下標。 function twoSum(nums, target) {const map new Map();for (let i 0; i < nums.leng…

Java中如何使用雪花算法生成唯一ID

雪花算法&#xff08;Snowflake ID&#xff09;是 Twitter 開源的一種分布式 ID 生成算法&#xff0c;其目的是生成全局唯一的 ID。該算法的核心思想是將一個 64 位的二進制數字分成幾個部分&#xff0c;每個部分表示不同的信息&#xff0c;例如數據中心ID、機器ID、序列號等。…

BUUCTF 梅花香之苦寒來 1

BUUCTF:https://buuoj.cn/challenges 題目描述&#xff1a; 注意&#xff1a;得到的 flag 請包上 flag{} 提交 密文&#xff1a; 下載附件&#xff0c;解壓得到一張.jpg圖片。 解題思路&#xff1a; 1、用010 Editor看了一下&#xff0c;剛開始以為是修改寬高的題&#xff…

羊大師教你如何有效解決工作中的挑戰與壓力?

在現代社會&#xff0c;工作問題一直是許多人頭疼的難題。無論是從工作壓力到職業發展&#xff0c;工作問題不僅會影響個人的心理健康&#xff0c;還可能對整個工作團隊的效率和和諧產生負面影響。因此&#xff0c;如何有效解決工作問題成為了每個職場人士都需要面對的挑戰。 …

Web前端—移動Web第四天(vw適配方案、vw和vh的基本使用、綜合案例-酷我音樂)

版本說明 當前版本號[20231122]。 版本修改說明20231122初版 目錄 文章目錄 版本說明目錄移動 Web 第四天01-vw適配方案vw和vh基本使用vw布局vh布局混用問題 02-綜合案例-酷我音樂準備工作頭部布局頭部內容搜索區域banner 區域標題公共樣式排行榜內容推薦歌單布局推薦歌單內…

Cuda out of memory原因以及解決辦法

Cuda out of memory原因以及解決辦法 文章目錄 Cuda out of memory原因以及解決辦法batch_size設置過大 batch_size設置過大 最近在做對抗訓練方面的實驗&#xff0c;當batch_size設置為256的時候&#xff0c;出現cuda out of memory. 當將batch_size修改為128時&#xff0c;則…

mysql使用--連接查詢

1.連接查詢 如&#xff1a;SELECT * FROM t1, t2; 上述FROM語句將t1表&#xff0c;t2表連接。 假設t1表含n條記錄&#xff0c;t2表含m條記錄&#xff0c;則t1, t2得到的表將包含n*m條記錄。 我們以一個混合連接&#xff0c;過濾的查詢分析語句執行過程。 如&#xff1a;SELECT…

thinkphp文件夾生成zip壓縮包

一、準備工作&#xff0c;使用phpinfo()查看有沒有zip擴展 <?php echo phpinfo(); ?>Thinkphp使用PHP自帶的ZipArchive壓縮文件或文件夾 顯示enabled 說明已經配置好 如果沒有安裝擴展的&#xff0c;請參照以下方法&#xff1a; 1、下載對應版本的擴展包&#xff1a…

Java操作excel之poi

1. 創建Excel 1.1 創建新Excel工作簿 引入poi依賴 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar…

QTableView 和 QAbstractTableModel

1.自定義類繼承QAbstractTableModel 頭文件如下&#xff1a; #ifndef TESTMOUDLE_H #define TESTMOUDLE_H #include "StructTest.h" #include <QAbstractTableModel> class TestMoudle : public QAbstractTableModel { public: TestMoudle(QStringList&…

如何一次性解壓多個文件

第一步&#xff1a;多選壓縮包 第二步&#xff1a;右鍵解壓即可 一句話&#xff0c;單個怎么解壓&#xff0c;多個就怎么解壓&#xff0c;只不過先選中 參考&#xff1a;如何一次性解壓多個文件

智能安全帽作業記錄儀賦能智慧工地人臉識別勞務實名制

需求背景 建筑工地是一個安全事故多發的場所。目前&#xff0c;工程建設規模不斷擴大&#xff0c;工藝流程紛繁復雜&#xff0c;如何完善現場施工現場管理&#xff0c;控制事故發生頻率&#xff0c;保障文明施工一直是施工企業、政府管理部門關注的焦點。尤其隨著社會的不斷進…

YARN,ZOOKEERPER--學習筆記

1&#xff0c;YARN組件 1.1YARN簡介 YARN表示分布式資源調度&#xff0c;簡單地說&#xff0c;就是&#xff1a;以分布式技術完成資源的合理分配&#xff0c;讓MapReduce能高效完成計算任務。 YARN是Hadoop核心組件之一&#xff0c;用于提供分布式資源調度服務。 而在Hadoop …

邏輯漏洞(業務邏輯)dami CMS

邏輯漏洞&#xff08;業務支付邏輯漏洞&#xff09;dami CMS 0x01 業務邏輯簡介 業務邏輯指的是一個系統或應用程序中的實際業務規則和流程。它描述了如何處理特定的業務需求、數據和操作。業務邏輯通常是根據特定行業或組織的需求而設計的。 在軟件開發中&#xff0c;業務邏…

零編程基礎Python的全面學習指南

文章目錄 前言什么是編程&#xff1f;Python代碼對應的機器碼準備開始Windows變量類型整型字符串型布爾類型字符串連接和整數相加if 語句捕獲用戶輸入導入MacWindows游戲時間&#xff01;小結關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Pyt…

磐舟CI使用說明及案例

整體介紹 磐舟作為一個devops產品&#xff0c;它具備基礎的CI流水線功能。同時磐舟的流水線是完全基于云原生架構設計的&#xff0c;在使用時會有一些注意事項。這里首先我們要了解磐舟整體的流水線打包邏輯。 文檔結構說明 一般來說&#xff0c;磐舟推薦單個業務的標準git庫…

反編譯-ApkTool

ApkTool下載地址&#xff1a; Apktool | ApktoolA tool for reverse engineering Android apk fileshttps://apktool.org/ 1、使用 apktool 解包 執行 java -jar apktool_2.4.1.jar d demo.apk -o demo 命令 java -jar apktool_2.4.1.jar d demo.apk -o demo 其中 d 后面是…

Nevron Vision for .NET 2023.1 Crack

Nevron Vision for .NET 適用于桌面和 Web 應用程序的高級數據可視化 Nevron Vision for .NET提供最全面的組件&#xff0c;用于構建面向 Web 和桌面的企業級數據可視化應用程序。 該套件中的組件具有連貫的 2D 和 3D 數據可視化效果&#xff0c;對觀眾產生巨大的視覺沖擊力。我…