zoukankan      html  css  js  c++  java
  • 6 线程threading

    1.第1种方式:threading模块

      1)单线程执行

    #-*- coding:utf-8 -*-
    import time
    
    def main():
        print("我错了。。。")
        time.sleep(1)
    
    
    if __name__ == "__main__":
        start_time = time.time()
        for i in range(5):
            main()
        end_time = time.time()
        print("the run time is %s"%(end_time-start_time))

        

      2)多线程执行

    • 主线程会等待所有的子线程结束后才结束

    #-*- coding:utf-8 -*-
    from threading import Thread
    import time
    
    #1.如果多个线程执行的都是同一个函数的话,各自之间不会有影响,各是各的
    def main():
        print("我错了。。。")
        time.sleep(1)
    
    
    if __name__ == "__main__":
        start_time = time.time()
        for i in range(5):
           # Process(target=test)  Process进程完成多任务
           t = Thread(target=main)
           t.start()
    
        end_time = time.time()
        print("the run time is %s"%(end_time-start_time))

        

     

    2.线程和进程的区别联系

    • 进程是资源分配的单位,资源,内存,屏幕,等
    • 线程是cpu调度的单位

           

    •  1个进程内有1个主线程,主线程可以创建多个子线程
    • 主线程任务完成,要等待子线程的任务完成

          

    3.第2种方式:Thread子类创建线程

    #coding=utf-8
    import threading
    import time
    
    class MyThread(threading.Thread):
        def run(self):
            for i in range(3):
                time.sleep(1)
                msg = "I'm "+self.name+' @ '+str(i) #name属性中保存的是当前线程的名字
                print(msg)
    
    
    if __name__ == '__main__':
        t = MyThread()
        t.start()

          

    4.僵尸进程,孤儿进程,0号1号进程

    1. 僵尸进程:子进程结束,父进程还没有给它收尸,此时的子进程成为僵尸进程
    2. 孤儿进程:父进程提前结束,没有等待子进程结束,此时的子进程成为孤儿进程
    3. 0号进程负责切换任务
    4. 1号进程负责生成,销毁 其他子进程

           

        

     5.线程的执行顺序:无序

    •  执行结果:(运行的结果可能不一样,但是大体是一致的)
    #coding=utf-8
    import threading
    import time
    
    class MyThread(threading.Thread):
        def run(self):
            for i in range(3):
                time.sleep(1)
                msg = "I'm "+self.name+' @ '+str(i)
                print(msg)
    def test():
        for i in range(5):
            t = MyThread()
            t.start()
    if __name__ == '__main__':

        

    • python解释器会屏蔽底层硬件的差异

        

    6. 总结

    1. 每个线程一定会有一个名字,尽管上面的例子中没有指定线程对象的name,但是python会自动为线程指定一个名字。
    2. 当线程的run()方法结束时该线程完成。
    3. 无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。
    4. 线程的几种状态

        

  • 相关阅读:
    数列(矩阵乘法+快速幂)
    最大公约数和最小公倍数问题
    解的个数(扩展欧几里得解不定方程)
    冒泡排序图(最长上升子序列变式)
    tomcat结合nginx使用小结
    ant构建web项目build脚本
    git分支合并到master
    oracle 存储过程,存储函数以及定时器的综合使用
    JPA 注解
    log4j简单应用
  • 原文地址:https://www.cnblogs.com/venicid/p/7966129.html
Copyright © 2011-2022 走看看