zoukankan      html  css  js  c++  java
  • python之路——多线程

    1、多线程模块 import threading

    2、用函数写一个多线程例子

    import threading,time
    def talk(name):
        print(name,"is tlaking",threading.current_thread(),threading.active_count())
        time.sleep(2)
        print("thread done ....",name)
    
    p1 = threading.Thread(target=talk,args = ("alex",))
    p2 = threading.Thread(target=talk,args = ("japhi",))
    p1.start()
    p2.start()
    

      结果是:

    alex is tlaking <Thread(Thread-1, started 5680)> 2
    japhi is tlaking <Thread(Thread-2, started 4592)> 3
    thread done .... alex
    thread done .... japhi

    其中threading.current_thread() 用来打印当前的线程,threading.active_count()打印线程数,结果是一起运行。

    3、用面向对象的方式写一个多线程

    import threading,time
    class Mythread(threading.Thread):
        def __init__(self,name):
            super(Mythread,self).__init__()
            self.name = name
        def run(self):                                  #必须是run
            print(self.name,"is tlaking")
            time.sleep(2)
    
    p3 = Mythread("alex")
    p4 = Mythread("japhi")
    p3.start()
    p4.start()
    

      但是,面向对象的形式中的方法名必须是run

    4、join()方法

      join方法是指当前线程执行完才能继续执行下一个线程,代码示例

    import threading,time
    start_time = time.time()
    def talk(name):
        print(name,"is tlaking",threading.current_thread(),threading.active_count())
        time.sleep(2)
        print("thread done ....",name)
    p1 = threading.Thread(target=talk,args = ("alex",))
    p2 = threading.Thread(target=talk,args = ("japhi",))
    p1.start()
    p1.join()
    p2.start()
    print("cost:",time.time() - start_time)
    

    结果是:

    先打印:alex is tlaking <Thread(Thread-1, started 3444)> 2
    2秒后。。。
    打印:thread done .... alex
    japhi is tlaking <Thread(Thread-2, started 11988)> 2
    cost: 2.0001144409179688
    2秒后打印:thread done .... japhi

      等1线程执行完后才执行线程2

    4、以一个循环的例子:

    import threading,time
    start_time = time.time()
    def talk(name):
        print(name,"is tlaking",threading.current_thread(),threading.active_count())
        time.sleep(2)
        print("thread done ....",name)
    res = []
    for i in range(10):
        p1 = threading.Thread(target=talk,args = (i,))    #多线程并发,target是任务,args是参数,参数后面一定要加,
        p1.setDaemon(True)  # 把当前线程变为守护线程
        p1.start()
        res.append(p1)
    for obj in res:
        obj.join()
    
    print("cost:",time.time() - start_time)
    

      计算10个线程都结束后花的时间,结果是cost: 2.0021145343780518

    5、守护线程

      t.setDaemon(True)   将t这个线程设为守护线程,主线程代码结束后不会等t线程是否结束,直接退出程序

    import threading,time
    start_time = time.time()
    def talk(name):
        print(name,"is tlaking",threading.current_thread(),threading.active_count())
        time.sleep(2)
        print("thread done ....",name)
    for i in range(10):
        p1 = threading.Thread(target=talk,args = (i,))    #多线程并发,target是任务,args是参数,参数后面一定要加,
        p1.setDaemon(True)  # 把当前线程变为守护线程
        p1.start()
    print("cost:",time.time() - start_time)
    

      结果是:

  • 相关阅读:
    spring-boot启动debug信息中non-fatal error解决
    spring-boot-sample-web-jsp
    How to configure spring boot through annotations in order to have something similar to <jsp-config> in web.xml?
    mybatis支持属性使用驼峰的命名
    No handler for type [text] declared on field [content]
    android自定义控件库
    Android 百分比布局库(percent-support-lib) 解析与扩展
    Android 高清加载巨图方案 拒绝压缩图片
    Android 热补丁动态修复框架小结
    AndroidAutoLayout 屏幕适配
  • 原文地址:https://www.cnblogs.com/japhi/p/7010806.html
Copyright © 2011-2022 走看看