Python 进程和线程详解(multiprocessing、threading)

news2024/11/14 15:27:30

文章目录

  • 1 概述
    • 1.1 进程 VS 线程
    • 1.2 优缺点
  • 2 进程
    • 2.1 三个步骤
    • 2.2 多进程
    • 2.3 带参数
      • 2.3.1 元组参数 args
      • 2.3.2 字典参数 kwargs
    • 2.4 获取进程编号
    • 2.5 设置进程守护
  • 3 线程
    • 3.1 三个步骤
    • 3.2 多线程
    • 3.3 带参数
      • 2.3.1 元组参数 args
      • 2.3.2 字典参数 kwargs
    • 2.4 获取线程编号
    • 2.5 设置线程守护

1 概述

1.1 进程 VS 线程

进程
线程 1
线程 2
线程 N

举例说明:
进程:QQ.exe
线程:支撑 QQ.exe 运行的各个程序

1.2 优缺点

优点缺点
进程可用多核 CPU资源开销大
线程资源开销小只能单核 CPU

2 进程

2.1 三个步骤

# 1.导入进程包
import  ultiprocessing

# 2.通过进程类创建进程对象,参数名有
# target: 执行的目标任务名(函数名、方法名)
# name  : 进程名,一般不用设置
# group : 进程组,一般不用设置
进程对象 = ultiprocessing.Process(target=任务名)

# 3.启动进程
进程对象.start()

2.2 多进程

import multiprocessing
import time


# 唱歌
def sing():
    for i in range(3):
        print("唱歌...")
        time.sleep(1)


# 跳舞
def dance():
    for i in range(3):
        print("跳舞...")
        time.sleep(1)


if __name__ == '__main__':
    sing_process = multiprocessing.Process(target=sing)
    dance_process = multiprocessing.Process(target=dance)

    sing_process.start()
    dance_process.start()

2.3 带参数

参数描述
元组 args参数有顺序要求
字典 kwargs参数无顺序要求
import multiprocessing
import time


# 唱歌
def sing(num):
    for i in range(num):
        print("唱歌...")
        time.sleep(1)


# 跳舞
def dance(num):
    for i in range(num):
        print("跳舞...")
        time.sleep(1)


if __name__ == '__main__':
    sing_process = multiprocessing.Process(target=sing, args=(3,))
    dance_process = multiprocessing.Process(target=dance, kwargs={"num": 3})

    sing_process.start()
    dance_process.start()

2.3.1 元组参数 args

sing_process = multiprocessing.Process(target=sing, args=(3,))
sing_process.start()

2.3.2 字典参数 kwargs

sing_process = multiprocessing.Process(target=dance, kwargs={"num": 3})
sing_process.start()

2.4 获取进程编号

import os

print(os.getpid())  # 当前进程ID
print(os.getppid())  # 当前进程的父ID

2.5 设置进程守护

import multiprocessing
import time


# 工作
def work():
    for i in range(10):
        print("工作中...")
        time.sleep(0.5)


if __name__ == '__main__':
    work_process = multiprocessing.Process(target=work)
    
    # 设置守护进程
    work_process.daemon = True
    
    work_process.start()
    time.sleep(1)
    print("主进程执行已完成!")

设置守护进程的前后对比图:
在这里插入图片描述

3 线程

3.1 三个步骤

# 1.导入线程模块
import threading

# 2.通过线程类创建线程对象,参数名有
# target: 执行的目标任务名(函数名、方法名)
# name  : 线程名,一般不用设置
# group : 线程组,一般不用设置
线程对象 = threading.Thread(target=任务名)

# 3.启动线程执行任务
线程对象.start()

3.2 多线程

import threading
import time


# 唱歌
def sing():
    for i in range(3):
        print("唱歌...")
        time.sleep(1)


# 跳舞
def dance():
    for i in range(3):
        print("跳舞...")
        time.sleep(1)


if __name__ == '__main__':
    sing_process = threading.Thread(target=sing)
    dance_process = threading.Thread(target=dance)

    sing_process.start()
    dance_process.start()

3.3 带参数

  • 同进程
import threading
import time


# 唱歌
def sing(num):
    for i in range(num):
        print("唱歌...")
        time.sleep(1)


# 跳舞
def dance(num):
    for i in range(num):
        print("跳舞...")
        time.sleep(1)


if __name__ == '__main__':
    sing_process = threading.Thread(target=sing, args=(3,))
    dance_process = threading.Thread(target=dance, kwargs={"num": 3})

    sing_process.start()
    dance_process.start()

2.3.1 元组参数 args

sing_process = multiprocessing.Thread(target=sing, args=(3,))
sing_process.start()

2.3.2 字典参数 kwargs

sing_process = multiprocessing.Thread(target=dance, kwargs={"num": 3})
sing_process.start()

2.4 获取线程编号

import threading


def work():
    print(f"线程ID为: {threading.current_thread().ident}")


if __name__ == '__main__':
    work_thread = threading.Thread(target=work)

    work_thread.start()

2.5 设置线程守护

  • 同 进程
import threading
import time


# 工作
def work():
    for i in range(10):
        print("工作中...")
        time.sleep(0.5)


if __name__ == '__main__':
    work_thread = threading.Thread(target=work)

    # 设置守护线程
    work_thread.setDaemon(True)

    work_thread.start()
    time.sleep(1)
    print("主进程执行已完成!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1229394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬取快手视频

原理 F12点击graphql能够看到里面有若干视频信息,一会儿要取其中的url地址 右键复制cURL 然后进入到这个转换器连接 https://curlconverter.com/python/ 点击这个连接复制上述信息,然后就能解析处下面的代码,拷贝到你的项目中替换cookies,headers,json_data 源代码 …

大模型重塑软件设计,南京真我加入飞桨技术伙伴,大模型生态圈成员又添一员!

为帮助伙伴更快、更好的应用大模型技术,飞桨技术伙伴体系及权益基于星河共创计划全面升级,通过丰富的场景、技术、算力、品牌等资源,为伙伴企业提供一站式的大模型资源对接,全面降低创建AI原生应用的门槛。 近日,南京…

QQ自动批量加好友(手机端)

1.需求 按照格式输入批量qq号,输入加好友间隔时间,脚本自动打开qq应用开始自动加好友,全程自动化操作。 输入qq号格式: 运行示意图: 2.代码 function carmiLogin () {var carmi = getCarMi()try {const data = {"key": carmi}http.__okhttp__.setTimeout(3000…

「Verilog学习笔记」边沿检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1ns module edge_detect(input clk,input rst_n,input a,output reg rise,output reg down );reg a_tem ; always (posedge clk or negedge rst_n) beginif…

2023年中国负极材料分类、产量及市场规模分析[图]

锂离子电池主要由正极、负极、隔膜、电解液、电池外壳组成。负极材料是锂离子电池的重要原材料之一,对于锂离子电池起关键作用。在充电过程负极材料中不断地与锂离子发生反应,将锂离子“擒获并存储”起来,亦将外部的功以能量的形式存储在电池…

Leetcode2937. 使三个字符串相等

Every day a Leetcode 题目来源:2937. 使三个字符串相等 解法1:枚举 设 len1、len2、len3 分别为字符串 s1、s2、s3 的长度。 min_len 是 3 个字符串长度的最小值。 枚举 len min_len 到 len 1,设 t1、t2、t3 分别是字符串 s1、s2、s…

富友支付最近“战况”

中国人民银行上海市分行官网在昨天披露了一份关于富友支付的行政处罚公示信息。富友支付因为涉嫌违法违规的反洗钱行为而遭到中国央行的罚款。 罚款金额达到455万,可谓相当可观。 当支付机构受到罚款处罚时,一些公司会选择在收到罚单后发表声明&#xff…

Node.js黑马时钟案例(本人详细介绍实现过程)

先上没有使用node.js之前的html部分代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}html,body {height: 100%;overflow: hidden;backgrou…

「Verilog学习笔记」ROM的简单实现

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 要实现ROM&#xff0c;首先要声明数据的存储空间&#xff0c;例如&#xff1a;[3:0] rom [7:0]&#xff1b;变量名称rom之前的[3:0]表示每个数据具有多少位&#xff0…

EfficientPhys

研究背景 基于相机的生理测量是一种非接触式方法&#xff0c;用于通过从身体反射的光捕获心脏信号。最常见的此类信号是通过光电体积描记图 (PPG) 测量的血容量脉搏 (BVP)。由此&#xff0c;可以推导出心率、呼吸率和脉搏传导时间。神经网络模型是当前最先进的 rPPG 测量方式。…

Rapid chain

这篇文章中提到 Elastico 运行6个epoch就会退化到公式失败率高达 0.97 omnileger 在第一个epoch需要一个初始化的随机种子&#xff0c;来初始化 VRF。这需要 O ( n 2 ) O(n^2) O(n2) 的复杂度&#xff0c;并且OminLedger 需要通过轻节点驱动枷锁和解锁的过程&#xff0c;这户家…

2023年中国中端连锁酒店分类、市场规模及主要企业市占率[图]

中端连锁酒店行业是指定位于中档酒店市场、具有全国统一的品牌形象识别系统、全国统一的运营体系、会员体系和营销体系的酒店。中端酒店通常提供舒适、标准化的房间设施和服务&#xff0c;价格较为合理&#xff0c;符合广大消费者的需求。其价格略高于经济型酒店&#xff0c;但…

【数字图像处理】Gamma 变换

在数字图像处理中&#xff0c;Gamma 变换是一种重要的灰度变换方法&#xff0c;可以用于图像增强与 Gamma 校正。本文主要介绍数字图像 Gamma 变换的基本原理&#xff0c;并记录在紫光同创 PGL22G FPGA 平台的布署与实现过程。 目录 1. Gamma 变换原理 2. FPGA 布署与实现 2…

unity-模块卸载重新安装

unity-模块卸载重新安装 发现模块错误&#xff1f;发现不可以卸载重装&#xff1f;... 依据以下步骤试试&#xff1a; 1. 删除模块文件夹&#xff08;以安卓模块为例&#xff09; 2. 找见编辑器模块json 3. 找见所有安卓相关模块修改selected为false&#xff1a;"sel…

2023年中国地产SaaS分类、产业链及市场规模分析[图]

SaaS是一种基于云计算技术&#xff0c;通过订阅的方式向互联网向客户提供访问权限以获取计算资源的一项软件即服务。地产SaaS则是SaaS的具体应用&#xff0c;提供了一个线上平台&#xff0c;用于协助房地产供应商与购房者、建筑承建商、材料供应商及房地产资产管理公司之间的协…

Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

5G与中国的海

今年国庆假期&#xff0c;香港迎来了阔别5年的国庆维港烟花汇演 10月1日晚上9点&#xff0c;“HKT x FWD 2023 年国庆烟花汇演”在维多利亚港上空上演。在23分钟时间里&#xff0c;燃放了超过3万枚烟花。而与以往维港烟花秀不同的是&#xff0c;为了让更多民众欣赏这次表演&…

【canvas】了解canvas,并实现会议预定记录钟表盘、页面水印

初识canvas Canvas 有什么用 Canvas 允许使用直线、曲线、矩形、圆形等基本图形绘制出复杂的图形 Canvas 可以加载图像&#xff0c;并进行各种处理&#xff0c;如裁剪、缩放、旋转等操作 Canvas 可以通过 JavaScript 控制&#xff0c;所以你可以利用帧动画原理&#xff0c;…

【C++】​——多态性与模板(其一)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

2023年中国稀土精密加工分类、市场规模及发展趋势分析[图]

稀土精密加工行业是指通过精密加工技术对稀土材料进行加工、制造和加工成品的一种行业。稀土精密加工行业主要包括稀土材料的提取、分离、纯化、加工和制造等环节&#xff0c;其中加工和制造是该行业的核心环节。稀土材料是指具有特殊物理、化学和磁性等性质的一类元素&#xf…