Python之多线程:Threading模块

1、Threading模块提供的类

Thread,Lock,Rlock,Condition,Semaphore,Event,Timer,local

2、threading模块提供的常用的方法

(1)threading.currentThread(): 返回当前的线程变量。

(2)threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。

(3)threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果

一、Thread 线程类

1、t1=threading.Thread(target=,name=,args=,kwargs=)

参数说明:

?group:线程组,目前还没有实现,库引用中提示必须是None;

?target:要执行的方法;

?name:线程名;

?args/kwargs:要传入方法的参数。

import threading

import time

def func1(a=None,b=None):

print a,b

time.sleep(1)

t1=threading.Thread(target=func1,args=(‘hello‘,‘world‘)) //这句话只是创建了一个线程,并未执行这个线程,此时线程处于新建状态。

t1.isAlive() 线程是否在运行

t1.getName 取线程名

t1.setName(‘test1‘) 设置线程名

t1.start() 启动线程,此时线程仍未处于运行状态,只是处于准备状态。

t1.join() 等待线程执行完

进程所在的线程是主线程

2、守护线程

t1.setDaemon(True)

主进程执行结束时,如果是守护线程,且守护线程没有执行结束,也一并随着主线程退出

# encoding=utf-8

import threading

import time

def func1(a=None, b=None):

print a,b

print ‘enter func1‘

time.sleep(5)

print ‘exit func1‘

t1 = threading.Thread(target=func1, args=(‘Hello ‘,‘World!‘))

print t1.isAlive()

print t1.getName()

t1.setDaemon(True)

print ‘daemon:‘,t1.isDaemon()

t1.setName(‘test1‘)

print t1.getName()

t1.start()

time.sleep(1.1)

print t1.isAlive()

print ‘main thread end‘

3、threading.currentThread() 主线程MainThread

二、多线程编程的方式

1、创建线程的两种方式

方式一:Thread的方式,新建一个线程实例,通过target传入执行流。通过args传入参数

方式二:Thread类通过重写的方式,t1.start()(内部调用了run())。所以可以重写run()方法,达到我们想要的效果

2、方式二:重写Thread类

import threading

class Mythread(threading.Thread):

def __init__(self,a):

threading.Thread.__init__(self):

self.a=a

def run(self):

print ‘now sleep‘,self.a,‘seconds‘

time.sleep(a)

print ‘sleep end‘

t1=MyThread(3)

t2=MyThread(2)

t1.start()

t2.start()

t1.join()

t2.join()

#隐含问题:对于线程的执行结果,主线程如何获取?

(1)通过队列的方式

(2)通过全局变量的方式

3、并发与并行

并发是指一个时间段内同时运行,表示的是一个区间

而并行是指在同一个时间点上都在运行,是一个点,并且并发在同一时间点上只能有一个程序在运行

并发线程的两种关系:同步与互斥。

三、线程池

from multiprocessing.dummy import Pool

def func(a):

time.sleep(1)

print a

if __name__==‘__main__‘:

lista=[1,2,‘a‘,‘b‘,‘5‘]

pool=Pool(5)

pool.map(func,lista)

pool.close() #线程池不接受新线程的请求

pool.join() #等待线程全部执行完

时间: 2024-11-08 04:17:17

Python之多线程:Threading模块的相关文章

python之多线程threading模块

#_*_coding:utf-8_*_ import threading from time import sleep,ctime #秒数 loops = [4,2] #这个函数是模拟一个实实在在是用来干活的函数 def loop(nloop,nsec):     print "函数%s 启动时间:%s 等待秒数:%s \n" %(nloop,ctime(),nsec)     sleep(nsec) #等待时间 def main():     print "主线程在 %s 

Python 多线程threading模块

首先,我们在了解多线程时需要理解的就是什么是多线程,按照官方的解释就是:多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术. 在我自学到这里的时候,通过会在想进程和线程到底是有什么区别,我的理解就是: 进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,一个进程可以包含多个线程. 下面就以简单的例子来加强我们对python 线程的理解. 默认情况下,我们在没有启动线程的时候,可以看一下程序总的运行时间,应该是每个函数

Python:使用threading模块实现多线程(转)

分类: python   标签: thread    评论: 暂无评论   阅读:5,420 views 综述 Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时无法利用多处理器的优势. 在Python中我们主要是通过thread和 threading这两个模块来实现的,其中Python的threading模块是对thread做了一些包装的,可以更加方便的被使用,所以我们使用

Python 官方代码threading模块的一个死锁的bug

Python的threading模块有一个比较严重的bug:那就是可能会让线程的等待提前结束或者延迟,具体的原因是因为线程的wait操作判断超时时依赖于实时时间,即通过time.time()获取到的时候,为了显示这个问题,请看下面的例子: from threading import Thread from threading import Event import time e = Event() stop = False class MyThread(Thread): def __init__

再看python多线程------threading模块

现在把关于多线程的能想到的需要注意的点记录一下: 关于threading模块: 1.关于 传参问题 如果调用的子线程函数需要传参,要在参数后面加一个","否则会抛参数异常的错误. 如下: 1 for i in xrange(5): 2 threads.append(threading.Thread(target=worker,args=(i,))) 2.关于join()阻塞 join()方法一旦被调用,这个线程就会被阻塞住,等其他线程执行完才执行自身.当我们在主线程A中,创建了n个子线

python多线程-threading模块

threading 是我们常用的用于 python 多线程的模块,其功能更加丰富.下面我们就来开始学习这个模块. 同样的,我这里声明一样我使用的版本是 python2.7,不同版本直接可能存在差异. 老规矩,使用 help() 函数获取帮助文档,看看里面有什么内容. threading 模块中提供了一个 thread 的类,注意不要和 thread 模块搞混了,两者差别还是很大的.thread 这个类可以实例化一个对象,每个对象代表一个线程,可以调用其中的 run() 方法来开启一个线程的运行.

python之多线程并发处理模块-threading

thread:多线程的底层支持模块,一般不建议使用: threading:对thread进行了封装,将一些线程的操作对象化,一般采用这种方法实现多线程编程 多线程实现有两种模式: 1.创建线程要执行的函数,把这个函数传递进Thread对象里 2.直接从Threading继承,新建一个新的类class, threading模块: threading.Thread类的重要函数 threading.currentThread(): 返回当前的线程变量. threading.enumerate(): 返

Py西游攻关之多线程(threading模块)

线程与进程 什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 A thread is an execution context, which is all the information a CPU needs to execute a stream of instructions. Suppose you're reading a

Python的多线程threading和多进程multiprocessing

python中的多线程就是在一个进程中存在着多个线程,在线程中,所有的线程都是共享资源的,线程之间的数据通信很简单.但是python仅支持一个线程的运行,因为python中存在一个全局解释器锁GIL(global interpreter lock),正是这个锁能保证同一时刻只有一个线程在运行,所以多线程依旧像是单线程的运行. GIL无疑就是一把对多线程有影响的全局锁,解决它对多线程的影响,不单单是释放GIL这么简单.GIL使得对象模型都是可以并发访问.GIL全局解释器锁解决多线程之间数据完整性和

多线程threading模块

threading模块是python中专门提供用来做多线程的模块.threading中最常用的类是thread. 查看线程数量函数:threading.enumerate() 查看线程当前名字函数:threading.current_thread() 以下看一个简单的多线程程序: #encoding: utf-8#采用多线程的方式import threadingimport time def coding(): for x in range(3): print('正在写代码%s'%threadi