zoukankan      html  css  js  c++  java
  • 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个线程,计算执行时间:
    # 虽然启动了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)
  • 相关阅读:
    暑假集训Day14 I (莫队)
    暑假集训Day14 G (gcd 数学)
    暑假集训Day13 H (进制转换 数学)
    暑假集训Day13 C (二分+贪心)
    暑假集训Day13 I (区间DP)
    暑假集训Day12 H (数论 STL)
    Java8中list转map方法总结
    Typora ---一款简洁的Markdown编辑器
    java8 map flatmap
    Elasticsearch基本查询总结
  • 原文地址:https://www.cnblogs.com/staff/p/9656910.html
Copyright © 2011-2022 走看看