Python多线程编程之线程子类化

  • 基本思路
    • Threading模块简介
    • **MyThread**主要代码
    • 实例
      • 所有代码
    • 运行结果

基本思路

导入Threading模块下的Thread类,将其子类化成MyThread,实现可以传入或者返回参数,并能通过对run方法的改写 ,达到定制化线程对象的目的。

Threading模块简介

参考python3.8官方文档 threading
基本方法

MyThread主要代码

func,args,name对应函数方法,传入参数,方法名称,在run方法里改写或者调用相应的函数方法实现线程的运行,结果可以通过getResults方法得到。

import threading
from time import sleep, ctimeclass MyThread(threading.Thread):def __init__(self, func, args, name=''):threading.Thread.__init__(self)self.func = funcself.name = nameself.args = argsdef getResults(self):return self.resdef run(self, *args, **kwargs):print("Starting",self.name,'at:',ctime())self.res=self.func(*self.args)print(self.name,'finished at :',ctime())

实例

对比单线程和多线程执行

∑n=1Nn\sum_{n=1}^Nn n=1∑N​n n!n! n!
斐波那契数(Fibonacci number)F(n)

所有代码

# -*- coding: utf-8 -*-"""
Module: Thread test.
Created on 2020/07/17 by Author
"""
import time
from time import sleep, ctime
from myThread import  MyThreaddef fib(x):sleep(0.005)if x<2:return 1return (fib(x-2)+fib(x-1))def fac(x):sleep(0.1)if x<2:return 1return (x*fac(x-1))def sum(x):sleep(0.1)if x<2:return 1return (x+sum(x-1))funcs=[fib,fac,sum]
n=18def main():nfuncs=range(len(funcs))STtime=time.time()print("Using Single Thread\n")for i in nfuncs:print("starting",funcs[i].__name__,"at:",ctime())print(funcs[i](n))print(funcs[i].__name__,"finished at:",ctime())midtime=time.time()print("Using Multiple Threads\n")threads=[]for i in nfuncs:t=MyThread(funcs[i],(n,),funcs[i].__name__)threads.append(t)for i in nfuncs:threads[i].start()for i in nfuncs:threads[i].join()print(threads[i].getResults())MTtime=time.time()print("all Done at:",ctime())print(" runtime by Single Thread:",midtime-STtime,"\n","runtime by Multiple Threads:", MTtime-midtime)if __name__ == '__main__':main()

运行结果

单线程任务按顺序依次执行, 多线程运行时长决定于跑最慢的那个线程。

Python多线程编程之线程子类化相关推荐

  1. python多线程编程(2): 线程的创建、启动、挂起和退出

    From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节,python的threading.Thread类有 ...

  2. python多线程编程(8):线程的合并和后台线程

    From: http://www.cnblogs.com/holbrook/archive/2012/03/21/2410120.html 线程的合并 python的Thread类中还提供了join( ...

  3. python多线程编程(7):线程间通信

    From: http://www.cnblogs.com/holbrook/archive/2012/03/21/2409031.html 很多时候,线程之间会有互相通信的需要.常见的情形是次要线程为 ...

  4. 多线程编程(2): 线程的创建、启动、挂起和退出

    python多线程编程(2): 线程的创建.启动.挂起和退出 如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法.而创建 ...

  5. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块

    本文转载自 Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mul ...

  6. Python多线程编程---(1)threading 模块 Thread 类

    全文参考:Python多线程编程(一):threading 模块 Thread 类的用法详解_frank 的专栏-CSDN博客 最近看了下团队自动化测试用例的代码,里面有涉及并行处理的逻辑,主要是基于 ...

  7. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  8. python多线程编程(1): python对多线程的支持

    From: http://www.cnblogs.com/holbrook/archive/2012/03/01/2376408.html 前面介绍过多线程的基本概念,理解了这些基本概念,掌握pyth ...

  9. python多线程编程_python多线程编程(1): python对多线程的支持

    前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支持. 虚拟机层面 Python虚拟机使用GIL(Global ...

最新文章

  1. 医疗影像处理:去除医疗影像中背景的影响2D/3D【numpy-code】| CSDN博文精选
  2. 苹果应用开发架构及项目结构
  3. UA MATH564 概率论VI 数理统计基础1
  4. (仿头条APP项目)2.主界面按钮切换Fragment页面
  5. java中 构造器与void
  6. 【雅礼集训2017】字符串【后缀自动机】【数据分治】
  7. java 二分查找_Java数组之Arrays方法
  8. Data-Mediator入门系列4----常用类说明
  9. Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)
  10. java生成xps文件_Java 将 Excel 转为PDF、图片、html、XPS、XML、CSV
  11. 高等教育中的人工智能市场现状研究分析报告-
  12. [Java学习] 小型社交平台,能发帖、查看、评论、删除帖子等功能
  13. keras深度学习(3)-单标签多分类问题之新闻分类
  14. JAVA抓取商品价格_使用JAVA爬取京东商品价格
  15. Alignment--本地blast使用详解1-数据库序列检索下载及比对
  16. 计算机休眠后无法连接无线网络,笔记本Win7系统唤醒休眠模式后无线无法自动连接怎么办...
  17. element ui 兼容低版本浏览器
  18. 【品牌DTC增长力】从AIPL模型看策略趋势
  19. 除了Navicat和DBeaver,还有没有免费又好用的数据库管理工具推荐
  20. Windows搭建nexus3.xx

热门文章

  1. 农业统计分析系列2-试验设计
  2. 计算机无法访问iTunes,无法连接到iTunes Store解决方法介绍
  3. WPF 逻辑树和可视化树
  4. 数据分析:逻辑树分析模型
  5. EXTJS开发过程遇到的一些问题的小结(转自麦田守望者)
  6. mysql查看sa密码_sqlserver怎么查看sa密码
  7. Spark SQL PERCENTILE分析调研
  8. opencv打开网络摄像机实时视频
  9. linux 硬盘报错日志,Linux内核I/O系统报错日志与硬盘故障对应关系
  10. 输入苹果的单价和购买的数量,计算总价,分别显示总价的整数部分和四舍五入后的整数部分