关于Python的Thread线程模块详解
作者:FLy_鹏程万里 发布时间:2022-12-20 02:48:16
Python线程与进程
进程:进程是程序的一次执行,每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行的辅助数据。
线程:所有的线程运行在同一个进程中,共享相同的运行环境。线程有开始顺序执行和结束三个部分。
举例说明:
(1)计算机的核心是CPU,它承担了所有的计算任务,它就像一座工厂,时刻在运行。
(2)假定工厂的电力有限,一次只能供给一个车间使用,也就是说,一个车间开工的时候,其他工厂度必须要停下来。其背后的意思就是,单个CPU一次只能运行一个任务。
(3)进程就好比工厂的车间,它代表CPU所能处理的单个任务,任意时刻,CPU总是运行一个进程,其他进程处于非运行状态。
(4)一个车间里,可以有很多工人,他们协同完成一个任务。
(5)线程就好比车间里的工人,一个进程可以包括多个线程。
Python thread模块
python threading模块
python中线程的使用
python中使用线程的方法有两种:函数、通过类来包装线程对象
(1)函数式:调用thread模块中的start_new_thread()函数来产生新的线程。如下例:
import thread
import time
def fun1():
print('Hello world!%s',time.ctime())
def main():
thread.start_new_thread(fun1,())
thread.start_new_thread(fun1,())
time.sleep(2)
if __name__ == '__main__':
main()
thread.start_new_thread(function,args[,kwargs])的第一个参数时线程函数,第二个参数时传递给线程函数的参数,它必须是tuple类型,kwargs是可选参数。
线程的结束可以等待线程自然结束,也可以在线程函数中调用thread.exit()或者thread.exit_thread()方法
(2)创建Threading.thread的子类来包装一个线程对象 ,如下例:
#coding:utf-8
#使用threading.Thread的子类来包装一个线程对象
import threading
import time
class timer(threading.Thread): #timer类继承于threading.Tread
def __init__(self,num,interval):
threading.Thread.__init__(self)
self.thread_num=num
self.interval=interval
self.thread_stop=False
def run(self):
while not self.thread_stop:
print 'Thread Object(%d),Time:%s'%(self.thread_num,time.ctime())
time.sleep(self.interval)
def stop(self):
self.thread_stop=True
def test(self):
thread1=timer(1,1)
thread2 = timer(2, 2)
thread1.start()
thread2.start()
time.sleep(10)
thread1.stop()
thread2.stop()
return
第二种方式,即创建自己的线程类,必要时可以重写threading.Thread类的方法,线程的控制可以由自己定制。
threading.Thread类的使用:
1、在自己的线程类的__init__里调用threading.Thread.__init__(self, name = threadname)
Threadname为线程的名字
2、run(),通常需要重写,编写代码实现做需要的功能。
3、getName(),获得线程对象名称
4、setName(),设置线程对象名称
5、start(),启动线程
6、jion([timeout]),等待另一线程结束后再运行。
7、setDaemon(bool),设置子线程是否随主线程一起结束,必须在start()之前调用。默认为False。
8、isDaemon(),判断线程是否随主线程一起结束。
9、isAlive(),检查线程是否在运行中。
来源:https://blog.csdn.net/Fly_hps/article/details/79779210


猜你喜欢
- 一般来说,内置的slice()函数会创建一个切片对象,可以用在任何允许进行切片操作的地方。下面是slice的简介:# slice 两种用法c
- 1、问题描述在使用v-model指令实现输入框数据双向绑定,输入值时对应的这个变量的值也随着变化;但是这里不允许使用v-model,需要写一
- 一、装饰器的本质:装饰器(decorator)本质是函数闭包(function closure)的语法糖(Syntactic sugar)函
- 由于工作的需求,需要用python做一个类似网络爬虫的采集器。虽然Python的urllib模块提供更加方便简洁操作,但是涉及到一些底层的需
- 先看一下arena_match_index的表结构,大家注意表的索引结构CREATE TABLE `arena_match_index` (
- php中-> 、=>、::、$this->四种符号在代码中很常见,使用很广泛。这篇文章主要介绍了php中-> 、=&
- 一、装饰器decorator decorator设计模式允许动态地对现有的对象或函数包装以至于修改现有的职责和行为,简单地讲用来动态地扩展现
- 第一阶段:从官网下载Anaconda之后,安装,一切正常。打开Anaconda navigator,提示我是否更新,要选不要更新。点击spy
- Numpy提供了几种数据保存的方法。以3*4数组a为例:1. a.tofile("filename.bin")这种方法只
- 一、requests库1、requests简介requests库就是一个发起请求的第三方库,requests允许你发送HTTP/1.1 请求
- 一、前言这篇文章主要是记录一下php生成静态页面的大致步骤,关于页面静态化,大家想必都听说过,但是真正用的时候反而不是很多。有些页面考虑到访
- 1.静态方法(staticmethod)静态方法:@staticmethod也是一个类方法,是可以直接类调用的。个人认为的使用场景是:只要要
- 自上一篇文章 Z Story : Using Django with GAE Python 后台抓取多个网站的页面全文 后,大体的进度如下:
- 前几天写了Mysql跨表更新的一篇总结,今天我们看下跨表删除。 在Mysql4.0之后,mysql开始支持跨表delete。 Mysql可以
- 阅读上一片:微软建议的ASP性能优化28条守则(1)技巧 3:将数据和 HTML 缓存在 Web 服务器的磁盘上有时,数据可能太多,无法都缓
- 我简单的绘制了一下排序算法的分类,蓝色字体的排序算法是我们用python3实现的,也是比较常用的排序算法。Python3常用排序算法1、Py
- 我写过一个外部模块扩展,现在开始看PHP源码中的mysql扩展,它是可以被集成到PHP内部的,所以应该算是内置的扩展了。 该扩展需要用到my
- 实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception
- 从其他语言转入Go语言的同学经常会陷入一个思考:如何创建一个单例?有些同学可能会把其它语言中的双检锁模式移植过来,双检锁模式也称为懒汉模式,
- mssql 错误日志文件存放位置:C:\Program Files\Microsoft SQL Server\MSSQL\LOG 用记事本查