#线程状态
#线程同步(锁)
#多线程的优势在于可以同时运行多个任务,至少感觉起来是这样,但是当线程需要共享数据时,可能存在数据不同步的问题。
#threading模块
#常用方法:
‘‘‘
threading.currentThread():返回当前的线程变量
threading.enumerate():返回一个包含正在运行的线程的list,正在运行指:线程启动后,结束前,不包含启动前和终止后的线程
threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())具有相同的效果
‘‘‘
# -*- coding: cp936 -*- #python 27 #xiaodeng #http://www.jb51.net/article/68323.htm #python线程详解 #案例 import threading #方法1:将要执行的方法作为参数传给Thread的构造方法 def func(): print ‘xiaodeng‘ t=threading.Thread(target=func) t.start() t.join()#join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数) #方法2:从Thread继承,并重写run() class MyThread(threading.Thread): def run(self): print ‘重写run()方法‘ t=MyThread() t.start() t.join() ‘‘‘ #构造方法: Thread(group=None,target=None,name=None,args=(),kwargs={}) group:线程组,目前还没有实现,库引用时提示必须是None target:要执行的方法 name:线程名 args/kwargs:要传入方法的参数,args和kwargs两个参数其实是二选一 #实例方法 isAlive():返回线程是否在运行 get/setName(name):获取/设置线程名 is/setDaemon(bool):获取/设置是否守护线程。初始值从创建该线程的线程继承,当没有非守护线程仍在运行时,程序将终止 start():启动线程 join([timeout]):阻塞当前上下文环境的线程。 ‘‘‘ #Lock() #lock是可用的最低级的同步指令,Lock处于锁定状态时,不被特定的线程拥有,Lock包含2种状态--锁定和非锁定以及2个基本的方法 #构造方法: #Lock() #实例方法: #acquire([timeout]):使线程进入同步阻塞状态,尝试获得锁定 #release():释放锁,使用前线程必须已获得锁定,否则将抛出异常 #案例: print ‘--‘*25 import threading import time data=0 lock=threading.Lock() def func(): global data print threading.currentThread().getName() #调用acquire([timeout])时,线程将一直阻塞 #直到获得锁定或直到timeout秒后 #返回是否获得锁定 if lock.acquire(): print ‘lock.acquire():‘,lock.acquire() print ‘%s get the lock.‘ % threading.currentThread().getName() data+=1 time.sleep(2) print ‘%s release lock...‘ % threading.currentThread().getName() #调用release()将释放锁 lock.release() t1=threading.Thread(target=func) t2=threading.Thread(target=func) t3=threading.Thread(target=func) t1.start() t2.start() t3.start()
时间: 2024-10-13 07:27:16