线程池,unittest参数化,协程

python的多线程只能利用cpu的一个核心,一个核心同时只能运行一个任务那么为什么你使用多线程的时候,它的确是比单线程快答:如果是一个计算为主的程序(专业一点称为CPU密集型程序),这一点确实是比较吃亏的,每个线程运行一遍,就相当于单线程再跑,甚至比单线程还要慢——CPU切换线程的上下文也是要有开销的。但是,如果是一个磁盘或网络为主的程序(IO密集型)就不同了。一个线程处在IO等待的时候,另一个线程还可以在CPU里面跑,有时候CPU闲着没事干,所有的线程都在等着IO,这时候他们就是同时的了,而单线程的话此时还是在一个一个等待的。我们都知道IO的速度比起CPU来是慢到令人发指的,python的多线程就在这时候发挥作用了。比方说多线程网络传输,多线程往不同的目录写文件,等等。

1、线程池就是为了防止无限启动很多线程,造成服务器压力大。2、协程        就只有一个线程。        异步IO            例子:去排队买票,你在这给他说一下你要买票,等到你的时候 他会自动把票给你,节省你排队的时间。        nginx1、从excel里面获取参数化数据
import threadingdef say(lis):   for i in lis:      print(i)

res = list(range(100))

for i in range(5):   t = threading.Thread(target=say,args=(res[i*20:(i+1)*20],))   t.start()

线程池
# 放线程的一个池子import threadpooldef say(num):   print(num)

res = list(range(101))pool = threadpool.ThreadPool(10)#创建一个线程池reqs = threadpool.makeRequests(say,res)#生成线程要执行的所有线程# for req in reqs:#  pool.putRequest(req) #实际才去执行的[ pool.putRequest(req) for req in reqs]

pool.wait() #等待 其他线程执行结束

线程池封装
import threadpool,asyncioclass MyPool(object):   def __init__(self,func,size=20,data=None):      self.func = func      self.size = size      self.data = data   def pool(self):      pool = threadpool.ThreadPool(self.size)#创建一个线程池,指定大小      reqs = threadpool.makeRequests(self.func,self.data)      #生成请求,分配数据      [pool.putRequest(req) for req in reqs]      #执行函数      pool.wait()      #等待线程执行完成def down(num):   print(num)my = MyPool(func=down,data=[1,2,3,4,5,6,7])my.pool()
unittest参数化
import unittestimport nose_parameterizedfrom ftl import DataToParamfrom MyLog import Loggerdef calc(a,b):   a = int(a)   b = int(b)   res = round(a/b,2)   print(res)   return res

class MyTest(unittest.TestCase):   @nose_parameterized.parameterized.expand(DataToParam.text('case_data.txt'))   def test_func(self,a,b,e):      res = calc(a,b)      self.assertEqual(res,int(e))

if __name__ == '__main__':   unittest.main()
 
从文件里面获取参数化列表
import os,xlrdclass DataToParam(object):   @classmethod   def text(cls,filename,seq=','):      cls.file_exist(filename)      with open(filename,encoding='utf-8') as f:         res = []         for line in f:            res.append(line.strip().split(seq))         return res

   @classmethod   def excel(cls,filename):      cls.file_exist(filename)      book = xlrd.open_workbook(filename) #打开excel      sheet = book.sheet_by_index(0) #获取sheet页      res = []      for row in range(sheet.nrows):  #sheet.nrows excel的行数         line_list = sheet.row_values(row) #取excel里面的每一行数据,返回的是一个list         res.append(line_list)      return res

   @classmethod   def file_exist(cls,filename):      if os.path.isfile(filename):#判断文件是否存在         return True      raise Exception('参数化文件不存在!')# print(DataToParam.text('case_data.txt'))res = DataToParam.excel(r'C:\Users\bjniuhanyang\Desktop\data.xlsx')print(res)# import json# print(json.dumps(res,indent=2))

转载于:https://www.cnblogs.com/flynn0825/p/8552893.html

day10-Python学习笔记(二十三)线程池,unittest参数化,协程相关推荐

  1. python学习笔记(二十三) -- 多进程和多线程

    目录 多线程多进程的意义 多进程的使用 方式一(fork):  只能在Unix/Linux/Mac系统下执行,windows不可以 方式二(multiprocessing.Process): 全平台通 ...

  2. 【黑马-python进阶】---学习笔记(7)---线程、进程、协程、正则表达式

    4 多任务-线程 4.1 多任务介绍 目标 知道多任务概念 多任务和单任务程序的区别 1.多任务解析 操作系统可以同时运行多个任务,现在,多核CPU已经非常普及,但是,即使过去的单核CPU,也可以执行 ...

  3. Python学习笔记(十三):异常处理机制

    Python学习笔记(十三):异常处理机制 关于Python的异常处理机制 Python学习笔记(十三):异常处理机制 一.异常处理机制 常见异常类型 二.异常处理 try...except 异常类的 ...

  4. Python学习笔记(十三)

    Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...

  5. python学习笔记(二) 基本运算

    python学习笔记(二) 基本运算 1. 条件运算 基本语法 if condition1: do somethings1elif condition2: do somethings2else: do ...

  6. Kotlin 学习笔记(十四)浅读协程

    上一篇-Kotlin 学习笔记(十三)高阶函数 为什么需要协程   举例一个异步编程中最常见的场景:后台线程执行一个A任务,下一个B任务依赖于A任务的执行结果,所以必须等待上一个任务执行完成后才能开始 ...

  7. ava并发学习之二:线程池

    第二步,是实现一个线程池 因为之前看书的时候留了个心眼,看线程池相关的内容的时候特意没去研究JDK的实现  因为学跟做不是一码事,写一个线程池,算是给自己看完并发实践这书的一个练习吧 废话不多说,练习 ...

  8. python学习笔记二

    1 正则 1-1 普通字符 s1 = 'asd25454655js6565askJ\nNKJLasd5165123' # 1 匹配单个大写英文字母 obj = re.compile('[A-Z]') ...

  9. (10.1)Python学习笔记二

    1.在项目工程中要模块化测试一个开发的功能,在测试通过后交付给项目组其他人员继续开发.要保证代码开发的性能和效率以及可扩展性. 2.项目工程中的文件夹分类要功能模块明确清晰,在python中引入某一个 ...

  10. 立创eda学习笔记二十三:如何将原理图和焊盘关联?(交叉选择)

    这是我在网上看到的一个提问,我对这个提问有两个理解, 1,如何显示原理图符号和PCB封装之间的对应位置关系? 那么可以使用以下的交叉选择功能. 这个功能是用来跳转原理图符号和PCB封装之间的对应位置. ...

最新文章

  1. 比特大陆发布第三代AI芯片,INT8算力达17.6Tops
  2. linux——(8)数据流重定向、管道命令
  3. SpringBoot的注解:@SpringBootApplication注解 vs @EnableAutoConfiguration+@ComponentScan+@Configuration...
  4. python 爬虫面试题_Python爬虫面试题
  5. c++11 智能指针 unique_ptr、shared_ptr与weak_ptr
  6. MyBatis从缓存查找数据的依据
  7. Linux 、shell 时间函数 - 获取七天前所在周
  8. PyCharm pyqt5 python串口通信封装类SerialCommunication
  9. Internet信息服务找不到
  10. linux下tmux
  11. 【王道考研操作系统】—文件的基本操作
  12. Markdown数学公式、特殊字符、上下标、积分、分式/根式 亲测有效
  13. Atitit 提升战力眼光和组织能力的几大要点 目录 1. 成长金字塔模型 德雷福斯模型 1 2. 提升战略眼光, 3 2.1. 视野与格局 3 2.2. 未来预测 未来发展负责,判断未来趋势, 3
  14. VBA读excel写xml
  15. 工作流框架Flowable
  16. 鸿蒙时代实力排名,混沌氏(浑沌)、鸿蒙氏,盘古开天辟地时两个最强大的部落首领?...
  17. linux下docker的使用教程,Linux中docker的使用方法讲解
  18. tolower c语言,tolower()
  19. 香港坚固金业的黑幕,属于非法投资平台。
  20. ISCC2021——web部分

热门文章

  1. 如何一个月减重20斤?
  2. 家用车多少马力才够用?
  3. 一个人开始变富时,会有这4个征兆,坚持下去,路越走越宽
  4. 未处理的超时和请求取消
  5. 抖音为什么能让人上瘾?
  6. CSS--CSS清除浮动的4种方式
  7. LL(1)分析表的构造
  8. sql azure 语法_Azure Data Studio中SQL代码段
  9. sql数据库查询聚合函数_如何使用SQL Server数据质量服务确保正确的数据聚合
  10. 行存储索引改换成列存储索引_索引策略–第2部分–内存优化表和列存储索引