python多进程和多线程

在知道和使用多进程和多线程之前
需要知道,进程是什么线程是什么?

进程:是计算机中正在运行的程序的实例。它是操作系统调度和管理的基本单位,包含程序代码、数据和执行状态等信息。*每个进程都有自己的内存空间和资源,可以与其他进程进行通信。

线程(Thread)是程序执行流的最小单元,是程序执行过程中的一个子任务,一个进程可以包含多个线程。线程拥有自己的程序计数器、栈、局部变量和状态,但是它们共享同一进程的全局变量、文件和系统资源。


一、多进程是指在一个操作系统中同时运行多个独立的进程。每个进程都有自己的地址空间、代码、数据和栈等资源,并且独立地运行在CPU上。多进程可以提高系统的吞吐量和响应时间,因为不同的进程可以同时运行,互不影响。

多进程的使用场景(这个是重点):计算密集型,即cpu密集型;用到很多计算数据的操作,可以使用多进程;譬如要计算数据库中很多数据的加减乘除的值。

1、简单的例子
multiprocessing模块:提供了一个Process类,可以方便地创建和管理子进程。

import multiprocessingdef worker(num):"""子进程要执行的任务"""print('Worker %s is running...' % num)if __name__ == '__main__':# 创建两个子进程p1 = multiprocessing.Process(target=worker, args=(1,))p2 = multiprocessing.Process(target=worker, args=(2,))# 启动子进程p1.start()p2.start()# 等待子进程执行完成p1.join()p2.join()print('All workers finished.')# 输出结果:# Worker 1 is running...# Worker 2 is running...# All workers finished.

2、实际使用的例子

import multiprocessing# 用于计算的函数
def test(a, b):print(a * b)return a * b# 主函数
def main():processes = []for i in range(10):p = multiprocessing.Process(target=test, args=(i, i+1))# 启动子进程p.start()# 将循环的子进程放入列表,用于后面的等待退出processes.append(p)for i in processes:i.join()
if __name__ == '__main__':main()

二、多线程是指在一个进程内同时执行多个线程的技术。一个进程由一个或多个线程组成,每个线程拥有独立的执行流程,可以同时执行不同的任务,提高处理器的利用率和系统的响应能力。多线程常用于并行处理、异步编程、提高程序运行效率等方面。

多线程的使用场景(这个是重点):I/O密集型,即input和output的缩写;例如磁盘,内存的读写,都是多线程可以使用的地方。

1、简单的例子
threading模块:提供了一个Thread类,可以方便地创建和管理子线程。

import threadingdef fibonacci(n):if n <= 1:return nelse:return (fibonacci(n-1) + fibonacci(n-2))if __name__ == '__main__':threads = []for i in range(10):t = threading.Thread(target=fibonacci, args=(35,))threads.append(t)for t in threads:t.start()for t in threads:t.join()

2、实际使用的例子

import threadingdef test(a):# 譬如去服务器读取文件是否存在,检查该名称是否符合规范;注:这个文件会很多,至少是上万的print(f'一个假的线程任务{a}')return adef add_process():threads = []for i in range(10):p = threading.Thread(target=test, args=(i,))# 启动子进程p.start()# 将循环的子进程放入列表,用于后面的等待退出threads.append(p)for i in threads:i.join()
if __name__ == '__main__':add_process()

后续有线程池和进程池,欢迎大家参考。

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

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

相关文章

观察者模式来啦

观察者模式本质上就两个关键的操作&#xff0c;观察者关心自己订阅的主题&#xff0c;主题数据有变化需要通知所有的观察者。 举个&#x1f330; 在武侠甚至玄幻小说中&#xff0c;天人合一一直都是一个重要的&#xff0c;无法缺失的概念。天人合一一直以来都是天骄的专属名词…

Java不可变集合

Java不可变集合 不可变集合&#xff1a;也就是不可以被修改的集合 创建不可变集合的应用场景 ●如果某个数据不能被修改&#xff0c;把它防御性地拷贝到不可变集合中是个很好的实践。 ●当集合对象被不可信的库调用时&#xff0c;不可变形式是安全的。 简单理解&#xff1…

ArcGIS Enterprise on Kubernetes 11.1安装示例

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 安装前置条件基本安装解压文件生成秘钥执行安装脚本 配置DNS方法一方法…

【Linux 进度条小程序】缓冲区+回车换行

文章目录 回车与换行缓冲区举个栗子fflush函数倒计时小程序进度条小程序 回车与换行 回车和换行是不同的两个概念 回车&#xff1a;\r 使光标回到本行行首。 换行&#xff1a;\n使光标下移一格。 一般我们的键盘上的Enter键是回加换行键 在c语言中 \n 表示回车换行 效果和Ent…

代码随想Day24 | 回溯法模板、77. 组合

理论基础 回溯法和递归不可分割&#xff0c;回溯法是一种穷举的方法&#xff0c;通常需要剪枝来降低复杂度。回溯法有一个选择并退回的过程&#xff0c;可以抽象为树结构&#xff0c;回溯法的模板如下&#xff1a; void backtracking(参数) {if (终止条件) {存放结果;return;}…

Java动态代理实现与原理详细分析

Java动态代理实现与原理详细分析 关于Java中的动态代理&#xff0c;我们首先需要了解的是一种常用的设计模式–代理模式&#xff0c;而对于代理&#xff0c;根据创建代理类的 时间点&#xff0c;又可以分为静态代理和动态代理。 1、代理模式 代理模式是常用的java设计模式&…

graph neural network 和 geometric neural network

一、graph neural network 处理图结构数据。 学习图中节点和边的表示。 任务&#xff1a;节点分类、图分类、链接预测。 核心思想&#xff1a;通过迭代地聚合节点的邻居信息来更新每个节点的表示&#xff0c;从而捕捉图结构中的局部和全局信息。 二、geometric neural netw…

从cot到agent的survey视频笔记

参考视频&#xff1a; 从CoT到Agent的列车即将发车&#xff0c;请各位旅客尽快上车 姚杳 由于总结不易&#xff0c;所以暂时都是粉丝可见&#xff0c;如果总结的不好见谅。 核心理解点总结&#xff1a; paradigm shifts of cot when cot&#xff1f;推理多的任务时 how cot…

是否曾经想过关闭Microsoft账户,那么你来对地方了

本文介绍如何使用web浏览器删除Microsoft账户。 如果你删除Microsoft帐户&#xff0c;你将无法访问所有Microsoft应用程序和服务&#xff0c;包括Xbox网络。 如何永久删除Microsoft帐户 完全关闭你的Microsoft帐户的唯一方法是访问Microsoft网站。在开始之前&#xff0c;你应…

ssh远程连接服务器

目录 一、远程连接服务器简介 1、什么是远程连接服务器 2、远程连接服务器的功能 3、远程连接服务器的类型&#xff08;以登录的连接界面来分类&#xff09; 4、文字接口连接服务器 二、连接加密技术简介 安全套接层&#xff1a; 1、版本协商阶段 2、密钥和算法协商阶…

初识MQ——消息队列技术选型

文章目录 同步和异步通讯同步通讯异步通讯 技术对比 同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c…

解决vue3使用iconpark控制台预警提示问题

前言 最近在项目中使用 iconpark-icon 来管理图标&#xff0c;一切都很顺利&#xff0c;引入链接后&#xff0c;图标正常显示&#xff0c;没有报错。但是控制台却发出了预警信息。 [Vue warn]: Failed to resolve component: iconpark-icon If this is a native custom eleme…

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 11 章:知识整合提示

要求CHATGPT高质量回答的艺术&#xff1a;提示工程技术的完整指南—第 11 章&#xff1a;知识整合提示 这种技巧利用模型已有的知识来整合新信息或连接不同的信息。 这种方法适用于将现有知识与新信息结合起来&#xff0c;从而更全面地理解特定主题。 如何在 ChatGPT 中使用…

redis------在java中操作redis

Redis&#xff08;非关系型数据库&#xff09;简介 redis下载 点击即可进入redis中文网进行下载 百度网盘windows版本 提取码 DMH6 redis主要特点 基于内存存储&#xff0c;读写性能高 适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09; 企业应用广泛 redis不同…

JAVA IO:NIO

1.阻塞 IO 模型 ​ 最传统的一种 IO 模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后&#xff0c;内核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c;用户线程交出 CPU。当…

【java】正则表达式

运用正则表达式之后代码量减少 String qq"123456789";System.out.println(qq.matches("[1-9]\\d{5,19}"));输入qq号 public static void main(String[] args) {String qq"123456789";System.out.println(checkqq(qq));}public static boolean ch…

你敢信!贪吃蛇游戏居然能插入到富文本编辑器里!

所有的大人都曾经是小孩子&#xff0c;虽然&#xff0c;只有少数的人记得。 ——《小王子》 引言 突然想起来前段时间看过的对半同学写的贪吃蛇游戏&#xff0c;据说对半同学只花了一个小时就写出来了。 《canvas 300行代码实现一个贪吃蛇 》 当时我正躺在床上刷手机&#x…

ARMV8 - A64 - 跳转和返回指令

说明 C语言等高级语言&#xff0c;根据是否需要返回到触发跳转代码的下一条代码&#xff0c;跳转有两种语句&#xff1a; 不需要返回&#xff0c;例如&#xff1a;if&#xff0c;goto&#xff0c;switch&#xff0c;while等语句。需要返回&#xff0c;例如&#xff1a;函数调…

数据结构——链式二叉树

前言&#xff1a;哈喽小伙伴们&#xff0c;上篇文章我们讲述了一个特殊的二叉树——使用数组实现的堆的基本知识之后呢&#xff0c;从这篇文章开始&#xff0c;我们就正式进入普通二叉树的介绍啦&#xff0c;二叉树真正的难点——递归&#xff0c;即将来临&#xff0c;小伙伴们…

unity旋转选中效果

代码和预制体 函数PlayAnim&#xff08;&#xff09;中的角度要根据按钮数量手动填好 using System; using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Plugins.Options; using UnityEngine;// Token: 0x0200001B RID: 27 public class BtnParentScript : Base…