Python创建多线程的三种方法
Python创建多线程的三种方法
- thread模块函数式创建线程
- 继承threading类创建多线程
- threading模块函数式创建线程
- 使用总结
thread模块函数式创建线程
调用thread模块中的start_new_thread()函数来产生新线程。语法如下:
thread.start_new_thread ( function, args[, kwargs] )
参数说明:
- function - 线程函数。
- args - 传递给线程函数的参数,他必须是个tuple类型。
- kwargs - 可选参数。
一言不合上代码:
#-*- coding:utf-8 -*-
import thread
import time
def A(para):for i in range(5):print paratime.sleep(0.5)def B(para):for i in range(5):print paratime.sleep(0.2)if __name__ == '__main__':thread.start_new_thread(A, ('我是线程A',))thread.start_new_thread(B, ('我是线程B',))while 1:pass
结果如下:
PS:我们可以看到,B线程先执行完了,因为我们设置了睡眠时间为0.2秒,A线程等待时间为0.5秒,虽然先运行的A线程,但是在等待的同时会自动切换到B线程,充分利用了CPU的等待时间,关于多线程,一般在IO密集型的场合使用比较多,比如运行爬虫的时候,关于多线程、多进程、多协程的适用场合,后面我会新建一个文章深入研究。
继承threading类创建多线程
继承线程类threading.thread,再重载成员函数run,程序处理的代码写在函数run中,最后再调用start()方法来运行线程
代码如下:
#-*- coding:utf-8 -*-
import threading
import time
'''
获得当前线程的名称
threading.current_thread().getName()
threading.current_thread().name
'''
class A(threading.Thread):def __init__(self):threading.Thread.__init__(self)def run(self):for i in range(5):print '我是线程A',threading.current_thread().getName()time.sleep(0.5)class B(threading.Thread):def __init__(self):threading.Thread.__init__(self)def run(self):for i in range(5):print '我是线程B',threading.current_thread().nametime.sleep(0.2)
t1=A()
t1.start()
t2=B()
t2.start()
结果如下:
threading模块函数式创建线程
创建线程时,传入一个函数,用于线程执行,比起通过类继承创建多线程,函数式创建线程有更好的灵活性。
代码如下:
#encoding:utf-8
import threading
import time
import randomdef run(sec):time.sleep(sec)print'当前线程的名字是: ', threading.current_thread().nameif __name__ == '__main__':print'这是主线程:', threading.current_thread().namethread_list = []'''创建多个线程'''for i in range(5):t = threading.Thread(target=run,args=(random.random(),))thread_list.append(t)#循环这5个线程,调用相应的run方法for t in thread_list:t.start()
结果如下:
使用总结
关于threading和thread的使用总结:threading 模块介绍:1.threading 是对thread模块的再封装2.threading 模块支持守护线程3.threading.Thread(target,args) 创建线程,但没有启动线程4..start() 开启线程5..join() 挂起线程6.当主线程执行完退出时,默认重要的子线程完成后再退出在thread模块中1.thread.start_new_thread()方法不仅创建了线程而且启动了线程2.当主线程执行完退出时,其他的线程都会无警告,无保存的死亡
Python创建多线程的三种方法相关推荐
- Java创建多线程的三种方法
Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...
- python实现多线程的三种方法threading.Thread(模块)的继承实现和函数实现;以及concurrent.futures模块的线程池实现
1.threading.Thread模块继承实现: import threading import timeclass TestThread(threading.Thread):def __init_ ...
- java多线程w3c_Java创建多线程的三种方式
前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...
- python调用cmd命令释放端口_详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- Java 创建线程的三种方法比较
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...
- 测试Python下载图片的三种方法
简 介: 通过Python软件包对网络URL图片链接进行下载,可以加快后期处理.本文测试了urllib, request两个软件包对图片进行下载效果.如果图片原网页有了防止下载机制,是无法下载图片. ...
- python学习音频-详解python播放音频的三种方法
第一种 使用pygame模块 pygame.mixer.init() pygame.mixer.music.load(self.wav_file) pygame.mixer.music.set_vol ...
- python可以播放音乐吗_详解python播放音频的三种方法
第一种 使用pygame模块 pygame.mixer.init() pygame.mixer.music.load(self.wav_file) pygame.mixer.music.set_vol ...
- Spark创建DataFrame的三种方法
跟关系数据库的表(Table)一样,DataFrame是Spark中对带模式(schema)行列数据的抽象.DateFrame广泛应用于使用SQL处理大数据的各种场景.创建DataFrame有很多种方 ...
最新文章
- select初始化默认选项
- 用CMake编译运行在网上下载的源文件src
- OpenCV人脸识别Eigen算法源码分析
- markdown 表格对齐方式、换行、内嵌列表、...
- 程序员能力提升:你应该知道的那些编程原则!!
- 转:RabbitMQ 消息队列特性知多少
- java中methods方法_java中Class.getMethod方法
- 这半年来的飞秋官网磕磕碰碰
- 信息必填的php,php - {“成功”:0,“消息”:“必填字段丢失”}在本地主机上测试文件 - 堆栈内存溢出...
- 西门子s7 计算机通讯,PLC与计算机通讯连接
- HTML浅学入门---基础知识 (1)基本规则
- sublime怎么配置python环境_在Sublime Editor中配置Python环境的详细教程
- 回溯---数字键盘组合
- 山西财经大学的计算机科学与技术怎么样,山西财经大学计算机科学与技术专业2017年在福建理科高考录取最低分数线...
- 数学建模 线性规划报告_春哥带你学建模数学建模国赛基础入门班(适合小白/零基础)...
- 历尽磨难,探索未来生活的2014年
- Typhon之异常错误克星TLSException
- PSINS不可交换(圆锥/划桨)误差补偿
- word利用mathtype进行公式分章节编号和引用
- 应用预测建模第六章-线性回归-预测化合物溶解度练习-R语言(多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网)