threading(多线程)
在python里面提供两个标准库thread和threading提供对线程的支持,由于thread提供比较低级,原始的线程以及一个简单的锁。而threading提供了较为高级的线程,在此我们详细介绍一下threading
方法:
treading.currentThread():返回当前的线程变量
treading.enumerate():返回一个包含正在运行的线程的list。正在运行是指线程启动后,结束前,不包括启动前和终止后的线程
treading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果
t.run():线程活动的方法。(线程具体做什么,在这里调用)
t.start():启动线程活动
t.join([time]):等待至线程终止,这阻塞调用线程至线程的join()方法被调用终止-正常退出或者抛出未处理的异常,或是可选的超时发生。
isAlive(t):返回线程是否活动
getName(t):返回线程名
setName(t):设置线程名
线程同步(锁Lock):
多个线程共同对摸个数据修改,可能出现不可以预料的结果,为了保证数据的正确性,需要对多个线程进行同步。可以通过threadLock = threading.Lock() 在线程中的run方法中。threadLock.acquire()锁定线程, threadLock.release()释放线程
import
threading
import
time
def
print_time
(thread_name
,
counter):
while
counter:
time.sleep(
1
)
print
"%s: %s"
% (thread_name
,
time.ctime(time.time()))
counter -=
1
threadTest2_1
= threading.Thread(
target
=print_time
,
args
=(
'threadTest2_1'
,
3
)) # target为调用的方法,args为参数以元组的形式传入
threadTest2_2 = threading.Thread(
target
=print_time
,
args
=(
'threadTest2_2'
,
3
))
threadTest2_1
.start()
threadTest2_2.start()
# 输出结果:
# threadTest2_1: Wed Jan 11 16:19:08 2017
# threadTest2_2: Wed Jan 11 16:19:08 2017
# threadTest2_1: Wed Jan 11 16:19:09 2017
# threadTest2_2: Wed Jan 11 16:19:09 2017
# threadTest2_1: Wed Jan 11 16:19:10 2017
# threadTest2_2: Wed Jan 11 16:19:10 2017
显然直接调用的方法比较单一,下面我们采用类的方法: