【python】进程和线程

文章目录

  • 进程
    • 创建进程
      • os.fork() - 只适用于linux/unix/mac
      • multiprocessing模块Process 类
      • Pool进程池
    • 进程间通信
      • 队列queue
        • 常见用法
      • 管道pipes
  • 线程
    • 创建线程
    • 线程间通信
      • 互斥锁
      • 队列

进程

任务管理器中一个任务就是一个进程
在这里插入图片描述

创建进程

os.fork() - 只适用于linux/unix/mac

multiprocessing模块Process 类

multiprocessing使用 Process 类创建进程对象

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

参数:

  • group: 通常设置为 None,它是为了向后兼容而保留的。在当前版本的 Python 中,此参数始终应为 None。
  • target: 一个可调用对象,表示在新进程中要执行的目标函数。可以是函数、方法或其他可调用对象。新进程将调用此目标函数来执行任务。
  • name: 为新进程指定的名称,是一个可选参数。如果不提供名称,系统将分配一个唯一的名称给新进程。默认是Process-N,N为1开始的整数。
  • args: 一个元组,包含传递给 target 函数的位置参数。如果 target 函数不需要参数,则可以省略此参数。
  • kwargs: 一个字典,包含传递给 target 函数的关键字参数。如果 target 函数不需要关键字参数,则可以省略此参数。

常用方法:

  1. start():
    启动进程并调用进程的 run 方法执行任务。
  2. run():
    实际执行进程任务的方法。默认情况下会调用用户自定义的 run 方法,但也可以通过重写此方法来自定义进程的执行逻辑。
  3. join([timeout]):
    等待进程执行结束。如果指定了 timeout 参数,则最多等待 timeout 秒,超时后会继续执行主进程。
  4. is_alive():
    判断进程是否处于活动状态(即正在执行任务)。
  5. terminate():
    终止进程的执行。不管任务是否完成,这将立即终止进程,可能会导致资源泄漏或不完整的清理,因此应谨慎使用。

常用属性:

  1. name:
    进程的名称。可以通过设置 name 属性来为进程指定一个可识别的名称。
  2. pid:
    进程的 ID(PID)。用于唯一标识一个进程。
  3. daemon:
    表示进程是否为守护进程的布尔值。默认情况下,进程是非守护进程(daemon 属性为 False)。可以通过设置 daemon 属性为 True 将进程设置为守护进程。
  4. authkey:
    进程之间通信的身份验证密钥。默认情况下为 None,表示没有启用身份验证。
  5. exitcode:
    进程的退出代码。当进程终止时,exitcode 属性会被设置为进程的退出状态码。
import multiprocessing

# 创建一个继承自 multiprocessing.Process 的子类
class MyProcess(multiprocessing.Process):
    def __init__(self, name):
        super(MyProcess, self).__init__()
        self.name = name

    # 实现 run 方法
    def run(self):
        print(f"Process {
     self.name} is executing.")


if __name__ == '__main__':
    # 创建进程对象
    process1 = MyProcess("1")
    process2 = MyProcess("2")

    # 启动进程
    process1.start()
    process2.start()

    # 等待进程结束
    process1.join()
    process2.join()

输出:
Process 2 is executing.
Process 1 is executing.
if __name__ == '__main__':
    # 创建进程对象
    process1 = MyProcess("1")
    process2 = MyProcess("2")

    # 启动进程
    process2.start()
    process1.start()
    
    # 等待进程结束
    process1.join()
    process2.join()

输出:
Process 1 is executing.
Process 2 is executing.

使用Process子类创建线程,定义__init__()和run()方法,init()中调用Process父类的方法,否则父类的初始化方法会被覆盖,无法开启进程

import multiprocessing
import time

class MyProcess(multiprocessing.Process):
    def __init__(self, name):
        super().__init__()  # 调用父类的__init__()方法
        self.name = name
    
    def run(self):
        print(f"{
     self.name} started")
        time.sleep

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Halcon与C#联合开发——1.读取图片、图像二值化

在vs中引入halcon控件 修改目标平台为 x64 拖出三个控件 代码展示 using System; using System.Windows.Forms; //引用支持halcon的命名空间 using HalconDotNet;namespace _1.HalconDisplay {public partial class Form1 : Form {// HObject 是Halcon库中表示图像和其他图形…

CentOS7下nginx部署测试

nginx部署测试 #安装程序和依赖yum install -y vim net-tools wgetyum -y install gcc pcre-devel zlib-devel openssl openssl-devel #下载nginx mkdir /opt/nginx cd /opt/nginx wget https://nginx.org/download/nginx-1.20.2.tar.gz#解压 tar zxvf nginx-1.20.2.tar.gz c…

Docker容器与虚拟化技术:OpenEuler 部署 Docker UI

目录 一、实验 1.环境 2.OpenEuler 部署 docker-compose-ui 2.OpenEuler 部署 docker ui 3.使用cpolar内网穿透 二、问题 1.docker run -w 的作用 一、实验 1.环境 (1)主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168…

PMBOK第八版、项目管理AI标准...PMI标准今年有这些进展

项目管理实践标准不断在演变,PMI作为项目管理领域的权威机构,一直致力于与全球各行各业的项目实践者一同探索和研究最新的行业标准,确保PMI标准符合全球项目专业人士当前能力建设与职业发展的需要。 今年以来,我们发布了一系列PM…

Python提取本体文件的数据

运行结果: 使用replace函数去除前缀。 查找OWL的对象属性: 输出结果: 出现最后这个的原因: 修改程序: 最后的输出结果: 这个解析之后是这个样子的:

考研数学|《1800》《1000》《880》《660》最佳搭配使用方法

直接说结论:基础不好先做1800、强化之前660,强化可选880/1000题。 首先,传统习题册存在的一个问题是题量较大,但难度波动较大。《汤家凤1800》和《张宇1000》题量庞大,但有些题目难度不够平衡,有些过于简单…

代码随想录训练营第59天 | LeetCode 503.下一个更大元素II、LeetCode 42. 接雨水

目录 LeetCode 503.下一个更大元素II 文章讲解:代码随想录(programmercarl.com) 视频讲解:单调栈,成环了可怎么办?LeetCode:503.下一个更大元素II_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 42. 接雨水 文章…

Compute Express Link (CXL): An Open Interconnect for Cloud Infrastructure——论文阅读

DAC 2023 Paper CXL论文阅读笔记整理 背景 Compute Express Link是一种开放的行业标准互连,在PCI Express(PCIe)之上提供缓存和内存语义,具有资源池和织物功能。本文探讨了CXL在解决云基础设施中的一些挑战方面的作用。 CXL主要…

数据化运营09 抓住问题关键:用相关性分析拆解多个影响因素

前一讲,和你探讨了多维分析的方法,通过多维分析来寻找指标变化的原因。当我们找到问题的原因时,自然会进一步思考一个问题:指标变化的原因这么多,决定问题的关键因素又是哪个呢? 需要专栏原数据进行实操的同…

Linux小程序——进度条

前言:哈喽小伙伴们,经过我们对多个Linux基本开发工具的学习之后,对于Linux的使用也算是更上一层楼。 所以这篇文章,我们就尝试使用我们学过的Linux知识来写一个小程序——进度条,达到实践以及加深知识映像的效果。 目…

智能文档处理技术综述

一、 智能文档处理介绍 智能文档处理(Intelligent Document Processing, IDP)是利用人工智能(AI)、机器学习(ML)、计算机视觉(CV)、自然语言处理(NLP)等技术…

POJ3037 + HDU-6714

两道最短路好题 POJ3037 手玩一下 发现每一点的速度可以直接搞出来&#xff0c;就是pow(2,h[1][1]-h[i][j])*V 那么从这个点出发到达别的点的耗费的时间都是上面这个数的倒数&#xff0c;然后直接跑最短路就好了 #include<iostream> #include<vector> #include<…

BeanPostProcessors是什么以及如何使用?

目录 一、BeanPostProcessors是什么&#xff1f;二、如何使用 BeanPostProcessor1、实现 BeanPostProcessor 接口2、注册 BeanPostProcessor3、示例代码 三、使用场景四、注意事项 一、BeanPostProcessors是什么&#xff1f; BeanPostProcessor 是 Spring 框架提供的一个扩展点…

Java多线程实战-从零手搓一个简易线程池(一)定义任务等待队列

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️本系列源码仓库&#xff1a;多线程并发编程学习的多个代码片段(github) &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正…

每日一题——LeetCode1748.唯一元素的和

方法一 两次遍历 var sumOfUnique function(nums) {let map new Map()for(let num of nums){map.set(num,map.has(num)?map.get(num)1:1)}let res0for(let num of nums){if(map.get(num)1) resnum}return res }; 消耗时间和内存情况&#xff1a; 方法二 一次遍历 var su…

新书速递——《可解释AI实战(PyTorch版)》

本书旨在帮助你实施最新的可解释AI技术&#xff0c;以构建公平且可解释的AI系统。可解释AI是当今AI研究中的热门话题&#xff0c;但只有少数资源和指南涵盖了所有重要技术&#xff0c;这些技术对实践者来说非常有价值。本书旨在填补这一空白。 本书读者对象 本书既适合那些有兴…

揭秘神秘商业模式:看似赔钱的买卖,如何月赚600万?

你是否曾被一个看似赔钱的买卖所吸引&#xff0c;最终却惊喜地发现它一个月竟然能赚600多万&#xff1f;这样的数字&#xff0c;是否让你感到意外又好奇&#xff1f;如果你仔细品味我们今天的内容&#xff0c;我相信&#xff0c;你也能开启属于自己的赚钱之路。 他们是如何实现…

自学编程的六种方法,你必须知道

随着互联网日趋迅猛&#xff0c;编程已经在我们生活当中无处不在了。众所周知&#xff0c;程序员的工资都很不错&#xff0c;于是越来越多的人&#xff0c;都想加入到编程的行业中来。那么如何加入到程序员的行业当中&#xff1f; PHP从入门到放弃&#xff0c;C语言从入门到放…

【CSDN活动】程序员职业生涯的分水岭:年龄还是经验?

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 程序员职业生涯的分水岭&#xff1a;年龄还是经验&#xff1f;引言技术更新换代…

基于nodejs+vue在线学籍管理系统python-flask-django-php

系统开发主要在 Windows 系统下进行&#xff0c;采用支持跨平台的nodejs语言开发完成&#xff0c;因此可以运行在任意开发环境下。系统采用mysql数据库的方式&#xff0c;按照express框架进行开发。 前端技术&#xff1a;nodejsvueelementui, Express 框架于Node运行环境的Web框…