python多线程(1):Threading模块

本文由IT小样撰写,介绍了Python多线程编程,重点讲解Threading模块,包括Thread类的基础和创建线程的方式,特别是通过派生Thread子类创建线程的实践,还提到了threading模块的其他函数。
摘要由CSDN通过智能技术生成

作者:IT小样

好记性不如烂笔头,对这句话深有感触,最近学习的一些东西由于没有马上用到,过一段时间后又忘记了,所以立个Flag,以后学习的东西,需要记忆的东西比较多时,写篇博客记录一下,就当是学习指引了。

Python多线程,看教程时有两个类Thread和Threading,Threading模块是在Thread模块的基础上进行封装的,使用更高级,因此本篇记录Threading模块的学习。

多线程编程总体概述

使用多线程编程,编程任务可以规划成几个执行特定函数的线程:
UserRequestThread:负责读取客户端输入,程序将创建多个线程,每个客户端一个,请求会放在队列中
RequestProcessor:从队列中获取请求并进行处理,为第3个线程提供输出
ReplyThread:负责向用户输出,将结果传回给用户

Threading模块

1、Thread类

1.1 基础介绍

属性描述
Thread对象数据属
name线程名
ident线程的标识符
daemon布尔标志,表示这个线程是否是守护进程
Thread 对象方法
_init_(group=None,target=None,name=None,args=(),kwargs={},verbose=None,daemon=None实例化一个线程对象,需要一个可调用的target,以及其参数args或者kwargs.
start()开始执行该线程
run()定义线程功能的方法
join(timeout=None)直至启动的线程终止之前一直挂起,除非给出了timeout,否则会一直阻塞

使用Thread类,可以有很多方法创建线程,简要列出3种:
1、创建Thread的实例,传给它一个函数
2、创建Thread的实例,传给它一个可调用的类实例
3、派生Thread的子类,并创建子类的实例
第一种和第三种方法使用较多,此处只介绍第三种。

1.2 创建线程(派生Thread子类,并创建子类的实例)

直接上代码:

import threading
from time import sleep,ctime

loops=(4,2)
class  MyThread(threading.Thread):
    def  __init__(self,func,args,name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args
        
    def  run(self):
        self.func(*self.args)
        
def  loop(nloop,nsec):
    print('start loop',nloop,'at',ctime())
    sleep(nsec)
    print('loop',nloop,'done at:',ctime())    
    
def  main():
    print('starting at:',ctime())
    threads = []
    nloops = range(len(loops))
    for i in nloops:
        t = MyThread(loop,(i,loops[i]),loop.__name__)
        threads.append(t)
    for i in nloops:
        threads[i].start()
    for i in nloops:
        threads[i].join()
    print('all done at:',ctime())
		
if  __name__ == '__main__':
    main()

运行结果见下图:
运行结果

1.3 threading模块的其它函数

函数描述
active_count()当前活动的thread对象个数
current_thread返回当前的Thread对象
enumerate()返回当前活动的Thread对象列表
settrace(func)为所有线程设置一个trace函数
setprofile(func)为所有线程设置一个profile函数
stack_size(size=0)返回新创建线程的栈大小;或为后续创建的线程设定栈的大小为size
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值