简单多线程实现:启动50个线程,并计算执行时间。
import threading import time def run(n): time.sleep(3) print("task:",n) # 使用单线程,执行完需要6s # t1.run() # t2.run() # 使用多线程,执行完需要3s,怎么确定是3s呢?在前后加时间相减能否算出来? # t1 = threading.Thread(target=run, args=("t1",)) # t2 = threading.Thread(target=run, args=("t2",)) # t1.start() # t2.start() # 快速执行多线程,启动线程不能太多,上下文切换会导致速度变慢 # 怎样算所有线程执行完的时间呢??直接在主线程里加时间相减是计算不出来的。因为~ # 主线程创建线程之后直接往下走了,不会等子线程执行完毕 # 一个程序至少有一个线程(主线程),主线程和子线程是并行的 # 主线程启动子线程之后子线程就独立了 # so,直接在主线程里加测不出来时间,那么可以在主线程里等待子线程的执行结果 # 加t.join(),作用是等待t线程的执行结果,不出结果不往下走, # 可以试试,如果在每个线程的启动语句后面加t.join(),那么加了之后程序就变成串行的了,达不到效果 # 如果这样呢?t1.start() t2.start() t1.join() 假设t1线程需要2秒,t2线程需要4秒那么t1先结束主线程就打印时间了 # 就需要 t1.start() t2.start() t1.join() t2.join() 按这个顺序执行才行。so我们启动50个线程,计算执行时间:
# 虽然启动了50个线程,但是有51个线程在执行,包括主线程,通过“threading.current_thread()”查看当前线程的名称
# 通过方法“threading.active_count()”查看当前活动线程的个数
start_time = time.time() t_objs = [] for i in range(50): t = threading.Thread(target=run, args=("t-{0}".format(i),)) t.start() t_objs.append(t) for t in t_objs: t.join() print("cost:", time.time()-start_time)