Python高级培训第三次作业

2023-11-16

任务:

作业:

import threading#导入threading库
import time#导入time库
class Get_time(object):#创建类Get_time 用于获取当前时间
    def __init__(self,each_time_time):#设置__init__ 要一个变量each_time_time来获取每次打印的间隔
        self.each_time_time=each_time_time
    def print_time(self):#设置打印函数的方法 每秒循环输出当前的年月日时分秒
        while True:
            print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
            time.sleep(self.each_time_time)

class Get_name(object):#创建类Get_name 用于获取姓名
    def __init__(self,name,number,each_name_time):#设置__init__ 要3个变量name,number,each_name_time 分别要 打印的名字 打印的次数 打印的间隔
        self.name=name
        self.number=number
        self.each_name_time=each_name_time

    def print_name(self):#设置打印函数的方法 实现张三的姓名每2秒打印输出4次结束
        for i in range(self.number):
            print(self.name)
            time.sleep(self.each_name_time)

class Do_it(Get_name,Get_time):#创建类Get_name 用于实现多线程 并完善两个类
    def __init__(self,each_time_time,name,number,each_name_time):#设置__init__ 要4个变量each_time_time来获取每次打印时间的间隔    name,number,each_name_time 分别要 打印的名字 打印的次数 打印的间隔
        Get_time.__init__(self,each_time_time)#再次加入父类Get_time
        Get_name.__init__(self,name,number,each_name_time)#再次加入父类Get_name
    def go_threading(self):#设置两个线程 同时运行时间和姓名的打印
        threading1=threading.Thread(target=self.print_time)#线程1来打印时间
        threading2=threading.Thread(target=self.print_name)#线程1来打印姓名
        threading1.start()#线程1开始
        threading2.start()#线程2开始

c1=Do_it(each_time_time=1,name="张三",number=4,each_name_time=2)#实例化一个类 为c1 每秒循环输出当前的年月日时分秒 实现张三的姓名每2秒打印输出4次结束
c1.go_threading()#运行c1中的go_threading方法 也就是线程的建立和开始

笔记:

优缺点分析:

多进程Process(multiprocess)

- 优点:可以利用多核CPU并行运算

- 缺点:占用资源最多、可启动数目比线程少

- 适合于:CPU密集型计算

多线程 Thread(Threading)

- 优点:相比进程,更轻量级,占用资源少

- 缺点:

- 相比进程:多线程只能并发执行、不能利用多CPU(GIL)

- 相比协程:启动的数目有限制,占用内存资源,有线程切换开销

- 适合于:IO密集型计算、同时运行的任务数目要求不多

多协程 Coroutine(asyncio)

- 优点:内存开销最小、启动协程数量多

- 缺点:支持的库有限制(aiohttp vs requests)、代码实现复杂

- 使用于:IO密集型计算、需要超多任务运行。但有现成库支持的场景。

threading

多线程

1.简单介绍怎么创建多线程

1.准备一个函数

def my_func(a,b):

do_craw(a,b)#意思就是对a和b进行编辑#craw喂

2.创建一个线程

import threading

thread=threading.Thread(target=my_fanc,args=(a,b))

3.启动线程

thread.start()

4.等待结束

thread.join()

.lock 用于解决线程安全问题

用法1:

import threading

lock = threading.lock()

lock.acquire()

try:

#do something

except:

lock.release()

用法2:

import threading

lock=threading.lock()

with lock:

#do something

例:

func.py
import threading
import time

lock = threading.Lock()
class Account:
    def __init__(self,balance):
        self.balance=balance

def draw(account,amount):
    with lock:
        if account.balance>=amount:
            time.sleep(0.1)
            print(threading.current_thread().name,'取钱成功')
            account.balance=account.balance-amount
            print(threading.current_thread().name,'余额:',account.balance)
        else:
            print(threading.current_thread().name,'余额不足')

main.py
import func
import threading
if __name__=='__main__':
    account=func.Account(1000)
    thread1=threading.Thread(name='thread1',target=func.draw,args=(account,800))
    thread2=threading.Thread(name='thread2', target=func.draw, args=(account,800))
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()

线程池

1线程池原理:

新建线程系统需要分配资源,终止线程系统需要回收资源,如果可以重用线程,则可以减去新建/终止的开销

线程池好处:

- 1) 提升性能:因为减去了大量新建、终止线程的开销,重用了线程资源;

- 2) 适用场合:适合处理突发性大量请求或需要大量线程完成任务、但实际任务处理时间短

- 3) 防御功能:能有效避免系统因为创建线程过多,导致系统负荷过大变慢等问题。

- 4) 代码优势:使用线程池的语法比自己新建线程执行线程更加简洁

2ThreadPoorExecutor的使用方法

#Executor 执行人

from concurrent.futures import ThreadPoolExecutor

with ThreadPoorExecutor() as poor:

results=pool.map(func_name,urls)

for result in results:

print(result)

from concurrent.future import ThreadPoolExecutor , as_completed

pool = ThreadPoolExecutor()

futures=[poor.submit(craw,url) for url in urls]

for future in futures:

print(future.result())

for future in as_completed(futures):

print(future.result())

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python高级培训第三次作业 的相关文章

  • (discord.py) 尝试更改成员角色时,“用户”对象没有属性“角色”

    因此 我正在尝试编写一个机器人 让某人在命令中指定的主持人指定的一段时间内暂停角色 我知道该变量称为 小时 即使它目前以秒为单位 我稍后会解决这个问题 基本上 它是由主持人在消息 暂停 personmention numberofhours
  • Django REST序列化器:创建对象而不保存

    我已经开始使用 Django REST 框架 我想做的是使用一些 JSON 发布请求 从中创建一个 Django 模型对象 然后使用该对象而不保存它 我的 Django 模型称为 SearchRequest 我所拥有的是 api view
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • 时空猎人服务器维护中是什么意思,时空猎人玩家自助FAQ问题汇总新手必备

    玩家自助FAQ问题汇总新手必备 你总能碰到各种各样的游戏问题 或机型问题 这里整理了一个常见问题解决办法 FAQ 可以帮忙大家 一 运行时程序异常退出建议玩家按照以下方式处理 1 清理缓存 关闭空闲软件 再次登录游戏 2 如果问题反复出现建
  • java8_02_stream(一)创建流和中间操作

    Stream 主要分为三部分 1 创建流 2 中间操作 3 终止操作 一 创建流的四种方法 Collection系列集合的stream parallelStream 方法 Stream stringStream list stream Ar
  • 在 ASP.NET Core 应用程序启动时运行代码的 3 种方法

    开发人员应该将初始化内存缓存的代码放在哪里 开发人员可能会发现有必要在 ASP NET Core 应用程序启动时只执行一次代码 例如 开发人员可能需要填充内存缓存 运行后台任务 从某些外部源读取配置 发布应用程序成功启动的事件等 ASP N
  • 序列化工具

    import java io ByteArrayInputStream import java io ByteArrayOutputStream import java io Closeable import java io ObjectI
  • 详解JavaScript中的Event Loop(事件循环)机制

    转载 javascript从诞生之日起就是一门单线程的非阻塞的脚本语言 单线程意味着 javascript代码在执行的任何时候 都只有一个主线程来处理所有的任务 而非阻塞则是当代码需要进行一项异步任务 无法立刻返回结果 需要花一定时间才能返
  • nginx下载并安装

    一 nginx简介 什么是 nginx 和可以做什么事情 Nginx 是高性能的 HTTP 和反向代理的web服务器 处理高并发能力是十分强大的 能经受高负 载的考验 有报告表明能支持高达 50 000 个并发连接数 其特点是占有内存少 并
  • python 贪吃蛇小游戏代码

    usr bin python coding UTF 8 作者 黄哥 链接 https www zhihu com question 55873159 answer 146647646 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权
  • 再见!微软官宣放弃Mac 版 Visual Studio IDE

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 5 分钟 来自 撰稿丨千山 对于Visual Studio 只要是开发者 或多或少都接触过 发布于1997年的Visual Studio标志着微软第一次将这么多开发工
  • 关系代数之专门的关系运算(选择、投影)

    选择 选择运算是从指定的关系中选出满足给定条件 用逻辑表达式表达 的元组而组成一个新的关系 进行选择运算的对象是 一个关系当中某一个属性的值 选择运算是将一张表当中的某一属性进行筛选 比如 将性别 sex 这列当中性别为女的元组筛选出来组成
  • constraint的一些用法总结

    主要就是增加约束的 以下几种约束 并 一一列举 1 主键约束 要对一个列加主键约束的话 这列就必须要满足的条件就是分空 因为主键约束 就是对一个列进行了约束 约束为 非空 不重复 以下是代码 要对一个列加主键 列名为id 表名为emp 格式
  • 刷脸支付:双12刷脸支付5折省翻天,政策持续补贴预热双十二

    刷脸支付成潮流 三家巨头争江山 刷脸支付的使用场景正在深入拓展 进入每一个与人民生活息息相关的行业 在政府综合政务 社会公交运输 商超营销运营 酒店景区服务等各方面都出现了刷脸支付的身影 我们能够看到 科技是在进步的 社会是在进步的 二维码
  • Caffe2——cifar10数据集创建lmdb或leveldb类型的数据

    cifar10数据集和mnist数据集存储方式不同 cifar10数据集把标签和图像数据以bin文件的方式存放在同一个文件内 这种存放方式使得每个子cifar数据bin文件的结构相同 所以cifar转换数据代码比mnist的代码更加的模块化
  • Vue项目提示 doesn‘t work properly without JavaScript enabled. Please enable it to continue

    由于本地是用docker部署了一套微服务 为了避免跨越问题 前端使用的nginx配置转发后端路径 访问返回状态时200 但是在response返回We re sorry but doesn t work properly without J
  • 「雕爷学编程」Arduino动手做(37)——MQ-3乙醇易燃气酒精传感器模块

    37款传感器与模块的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止37种的 鉴于本人手头积累了一些传感器和模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手试试做实验 不管成功与否 都
  • Android studio心得——fragment动态加载

    前言 在Android应用程序中 Fragment是一种可以嵌入Activity中的组件 通过 Fragment 我们可以将UI 目录 前言 一 什么是Android Studio 二 简介Fragment 三 学期知识汇总 四 什么是碎片
  • C++类与对象--static修饰符

    C 类与对象 static修饰符 1 类静态数据成员的定义及初始化 1 1 声明 1 2 初始化 1 3 调用 1 4 案例 1 5 小结 2 类静态成员函数的定义 2 1 声明 2 2 调用 2 3 案例 2 4 小结 3 static
  • 数据库字段类型

    太长时间没有操作数据库 收集了部分有用的资料 一 创建数据表 CREATE TABLE mytable id VARCHAR 4 NOT NULL name VARCHAR 10 sex CHAR 1 createtime DATE age
  • ROS系统

    参考 https blog csdn net qq 28087491 article details 119053810 https www bilibili com video BV1zt411G7Vn spm id from 333 3
  • 静态网页怎样实现动态交互?-JavaScript

    在Html基础上 javascript能够开发交互式web网页 javascript的出现使得网页和用户之间实现了一种实时性的 动态的 交互性的关系 javascript短小精悍 又是在客户机上执行的 大大提高了网页的浏览速度和交互能力 同
  • Python高级培训第三次作业

    任务 作业 import threading 导入threading库 import time 导入time库 class Get time object 创建类Get time 用于获取当前时间 def init self each ti