一、多线程
多线程类似于同时执行多个不同程序,多线程运行有如下优点:
· 使用线程可以把占据长时间的程序中的任务放到后台去处理。
· 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
· 程序的运行速度可能加快。
· 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
Python3 通过标准库 threading 提供对线程的支持。threading 模块提供的方法:
threading.Thread(): 表示控制线程的类。该类可以以有限的方式安全地进行子类化。
threading.Timer(): 在指定的时间间隔过后执行函数的线程
threading.currentThread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
threading.ThreadError(): 针对各种与线程相关的错误引发。请注意,许多接口使用RuntimeError而不是ThreadError。
线程模块提供Thread类来处理线程,Thread类提供了以下方法:
threading.Thread(group=None, target =None, name=None, args =(), kwargs = {})
参数List:
group应该None,在实现ThreadGroup类时保留用于将来的扩展。
target是run()方法调用的可调用对象。默认为None,意味着什么都没有被调用。
name是线程名称。默认情况下,唯一名称由"Thread-N"形式构成,其中N是小十进制数。
args是目标调用的参数元组。默认为()。
kwargs是目标调用的关键字参数字典。默认为{}。
如果子类重写构造函数,则必须确保在对线程执行任何其他操作之前调用基类构造函数(Thread .__ init __())。
run(): 用以表示线程活动的方法。
start():启动线程活动。
join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
isAlive(): 返回线程是否活动的。
getName(): 返回线程名。
setName(): 设置线程名。
二、实例
import threading
import time
def next():
print('在%s,正在看电影' % time.ctime())
time.sleep(1.5)
def main():
next_threads = [] # 用来存放执行next函数线程的列表
for i in range(1,10): # 创建1个线程用于next(),并添加到next_threads列表
t = threading.Thread(target=next) # 执行的函数如果需要传递参数,threading.Thread(target=函数名,args=(参数,逗号隔开))
next_threads.append(t)
for i in next_threads: # 启动存放在next_threads列表中的线程
i.start()
for i in next_threads: # 直至启动的线程终止之前一直挂起;除非给出了 timeout(秒),否则会一直阻塞
i.join()
if __name__ == '__main__':
main()
网友评论