Python简单的多线程demo:常用写法

简单多线程实现:启动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个线程,计算执行时间:

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)

猜你喜欢

转载自www.cnblogs.com/staff/p/9656910.html