python实验4

news2024/11/15 18:58:29

一、实验目的

  1. 掌握和使用进程池
  2. 掌握和使用多线程
  3. 掌握和使用互斥锁
  4. 掌握协程的使用

二、实验内容

  1. 使用进程池计算区间内素数个数
  2. 使用多线程计算区间内合数个数
  3. 互斥锁的设计和使用
  4. 异步状态转换器

三、实验环境
在Educoder平台进行实验

四、实验要求
根据每个实训的每个关卡要求完成代码提交和测评

五、实验步骤

  1. 使用进程池计算区间内素数个数
    第一个进行素数的判断
    我们创建进程,并进行分区,然后通过分区
    给每个分区的数进行计算

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 使用多线程计算区间内合数个数
    进程里的单位是线程,线程可以拥有自己的副本,而不影响别的进程的数据
    在这里插入图片描述

  2. 互斥锁的设计和使用
    其基本思路是,当线程占用进程中的数据时进行上锁,然后其他线程没办法使用
    在这里插入图片描述在这里插入图片描述

  3. 异步状态转换器
    逻辑很清楚:
    举例:街上的自动售货机中明显能看到状态机逻辑。假设有一台只卖2元一瓶的汽水的售货机,只接受五毛和一块的硬币。初始状态是”未付款“,中间状态有”已付款5毛“,”已付款1块“,”已付款1.5块“,”已足额付款“,四个状态。状态切换的触发条件是”投一块硬币“和”投5毛硬币“两种,”到达足额付款“状态,还要进行余额清零和弹出汽水操作。 在下图中,可以看到系统有 S1, S2, S3, S4 四个状态, 0 和 1 是状态机可以从一个状态到另一个状态的值,例如,只有当只为1的时候,S0可以转换到S1,当只为0的时候, S0可以转换到S2。这个转换的过程就是根据条件来切换状态,题目中,我们会输入一组数字作为事件,根据这一组数字,完成状态转换并输出相应的动作,从 S0 开始,叫做 初始状态,最后到 S4,叫做结束状态

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六、问题记录和实验总结(必写)
对于进程和线程的理解和使用,python方面的学习,更是对操作系统的理解
本次实验通过使用Python编程语言,学习了进程池、多线程、互斥锁和协程的基本概念和使用方法。在实验中,我们通过进程池实现了对区间内素数个数的计算,通过多线程实现了对区间内合数个数的计算,并且利用互斥锁确保了多线程操作时的数据安全。此外,还了解了协程的基本原理和使用方法,并实现了异步状态转换器。通过这些实验,我们更深入地理解了并发编程的概念和实现方式,提高了对Python并发编程模型的掌握程度
特别说明一下
asyncio模块
asyncio是Python 3.4版本引入的标准库,用于处理异步I/O。它提供了一组高层次的API,用于并发地运行Python协程,并控制它们的执行。asyncio被用作许多流行的Python异步框架的基础,包括Tornado、aiohttp和Twisted。
asyncio的基本概念
asyncio的核心概念是事件循环和协程。
事件循环是一个无限循环,它负责管理异步程序的执行。它从各种来源(例如网络套接字、文件系统和操作系统)接收事件,并将它们分发给相应的协程。
协程是可暂停的函数。它们使用async关键字定义,并使用await关键字暂停执行。当协程等待I/O完成时,事件循环会将其挂起,然后在I/O完成后继续执行它。
使用asyncio
要使用asyncio,首先需要创建一个事件循环。然后,可以使用asyncio.run()函数运行协程。该函数将创建一个新的事件循环(如果尚未创建),运行指定的协程,然后关闭事件循环。
以下是一个简单的asyncio程序示例:
asyncio的优点
asyncio的主要优点是它可以提高并发应用程序的性能。通过允许协程在等待I/O完成时被阻塞,asyncio可以使应用程序在没有大量未使用线程的情况下有效地处理多个并发请求。
asyncio的另一个优点是它易于使用。其API直观且易于理解,并且有许多优秀的第三方库可用于简化常见异步编程任务。

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

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

相关文章

springCloudAlibaba集成seata实战(分布式事物详解)

一、分布式事务 1. 事务介绍 1.1 基础概念 事务:保证我们多个数据库操作的原子性,多个操作要么都成功要么都不成功 事务ACID原则 A(Atomic)原子性:构成事务的所有操作,要么都执行完成,要么全部…

使用冒泡排序模拟实现qsort函数

目录 冒泡排序qsort函数的使用1.使用qsort函数排序整型数据2.使用qsort函数排序结构数据 冒泡排序模拟实现qsort函数今日题目1. 字符串旋转结果2.杨氏矩阵3.猜凶手4.杨辉三角 总结 冒泡排序 冒泡排序的核心思想是:两两相邻的元素进行比较 代码如下: //⽅法1 void bubble_so…

ros-param添加参数控制rviz显示掉帧问题

在ros中有一套参数系统可以直接写到launch文件中,这样非常方便,不需要编译就能直接用,这对于c来说非常的有好,这里记录一下如何使用。 主要步骤如下: 首先初始化节点 使用nodehandle进行管理,然后通过param…

停车场道闸系统的实施流程有哪些安装注意事项?

随着城市交通压力的不断增加,停车场道闸系统的安装与优化成为了提升城市交通效率的关键环节。不同类型的停车场,如社区、园区、公共交通站点以及商业综合体等,都有其独特的运营特点和用户需求。因此,了解并掌握停车场道闸系统安装…

腾讯客户端开发实习一面

听说腾讯25年5000offer,我就去了...投完简历,当天晚上做完测评,第二天下午打电话约了第三天面试,额流程很快,快到第三天就寄了... 写在这里做个记录,也可以给学习学妹们经验,文末也有大厂面经合…

VSCode中vue的packag.json报错:unable to load schema from‘ http://json.schema‘...问题解决

package.json有这个报错,类似于这种问题一般是网络连接有问题,无法加载重启一下就好。 但是如果是没有网络或者云桌面等环境不能连接外网,就在设置中把这个设置一下,这样就不报错了,根据需要选择处理。

element问题总结之el-table使用fixed固定列后滚动条滑动到底部或者最右侧的时候错位问题

el-table使用fixed固定列后滚动条滑动到底部或者最右侧的时候错位 效果图前言解决方案纵向滑动滚动条滑动到底部的错位解决横向滚动条滑动到最右侧的错位解决 效果图 前言 在使用el-table固定行的时候移动滚动条会发现移动到底部或者移动到最右侧的时候会出现表头和内容错位或…

CentOS7使用Docker搭建Joplin Server并实现多端同步与公网使用本地笔记

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具,拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能,…

python怎么输出小数

先将整型转换成float型,再进行计算,结果就有小数了。 >>> a 10 >>> b 4 >>> c a/b >>> a,b,c (10, 4, 2) >>> a float(a) >>> d a/b >>> a,b,d (10.0, 4, 2.5) >>> 注意&…

ES6-2:Iterator、Proxy、Promise、生成器函数...

11-Iterator迭代器 打印出的是里面的内容,如果是for in打印出来的是索引,of不能遍历对象Symbol.iterator是js内置的,可以访问直接对象arr[Symbol.iterator],()调用对象非线性一般不能迭代 后两个是伪数组,但是是真迭…

QT、ffmpeg视频监控分屏

1、支持分屏(4,6,8,9,13,16,25,32,64)切换 2、支持拖拽效果 3、支持播放mp4,rtmp等 4、本人亲测支持播放32路,64路没做测试 5、支持读…

12.文件浏览器

子程序参数的使用 1.可空的用法;表示这个参数不写也行。 2.如何使用递归 3.需要注意的事 递归的子程序必须有个退出的条件 注意区分递归和循环,不要混用 流程: 1.插入按钮,输入输出调试文本(“按钮被单击”&…

Windows本地部署Ollama+qwen本地大语言模型Web交互界面并实现公网访问

文章目录 前言1. 运行Ollama2. 安装Open WebUI2.1 在Windows系统安装Docker2.2 使用Docker部署Open WebUI 3. 安装内网穿透工具4. 创建固定公网地址 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具,并安装Open WebUI结合cpolar内网穿透软…

三次握手与四次挥手到底是怎么回事?

三次握手和四次挥手是TCP/IP协议中建立和断开连接的关键步骤,它们是保证可靠通信的重要机制。这里将探讨这两个概念,并解释它们背后的原理。 三次握手 三次握手用于建立TCP连接,它由客户端和服务器之间发送的三个报文组成: 第一次…

竞赛 基于Django与深度学习的股票预测系统

文章目录 0 前言1 课题背景2 实现效果3 Django框架4 数据整理5 模型准备和训练6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于Django与深度学习的股票预测系统 ** 该项目较为新颖,适合作为竞赛课题方向&#xff…

怎么使用JMeter进行性能测试?

一、简介 JMeter是Apache软件基金会下的一款开源的性能测试工具,完全由Java开发。它专注于对我们应用程序进行负载测试和性能测量,最初设计用于web应用程序,现在已经扩展到其他测试功能,比如:FTP、Database和LDAP等。…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5 第一阶段竞赛项目试题 本文件为信息安全管理与评估项目竞赛-第一阶段试题,第一阶段内容包括:网络平台搭建与设备安全防护。 本次比赛时间为180分钟。 介绍 竞赛阶段…

Github 2024-04-09 Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-09统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10Vue项目1JavaScript项目1系统设计指南 创建周期:2507 天开发语言:Python协议类型:OtherStar数量:241693 个Fork数量:42010 次…

广西有多少家建筑模板企业?

作为一个建筑大省,广西地区建筑模板企业数量可谓不少。这些企业规模大小不一,生产能力和产品质量参差不齐。然而,在这些企业中,有一家脱颖而出,备受业内推崇,那就是贵港市能强优品木业有限公司。 能强优品木业有限公司是广西知名的建筑模版生产厂家,拥有25年的丰富生产经验。公…

弹性 MapReduce(EMR)

一.产品简介 1产品概述 E腾讯云 EMR 提供基于云服务器(CVM)和容器服务(TKE)两种部署运行方式: 2.Agent 的安装目录 Linux 安装目录是/usr/local/qcloud/stargate和/usr/local/qcloud/monitor CoreOs 安装目录是/va…