• 进程开启方式和进程在所有子进程结束之后才结束


    1.主进程会等待所有子进程结束后才会程序结束

    2.主线程也会等待所有子线程结束后才会主线程结束

    3.from multiprocessing import Pool这个进程池,并不会等待所有的进程运行完成,而是主线程代码执行完成后程序就立即结束 所以这个进程池需要加p.close()和p.join()

    4.from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor 的进程池和线程池,主进程或者主线程会等进程池内或者线程 池内的任务运行完成,整 个程序才会结束

    5.协程的问题,所有协程,主线程必须加join()阻塞,否则其他协程不运行.

    6.关于守护进程的问题,守护进程是在主进程的代码结束后,立刻结束.守护线程是在所有子线程都结束后,守护线程结束.

    示例一:

    import threading
    from time import ctime, sleep
    import time
    
    def ListenMusic(name):
            print ("Begin listening to %s. %s" %(name,ctime()))
            sleep(8)
            print("end listening to %s. %s" %(name,ctime()))
    
    def RecordBlog(title):
            print ("Begin recording the %s! %s" %(title,ctime()))
            sleep(5)
            print('end recording the %s! %s' %(title,ctime()))
    
    threads = []
    t1 = threading.Thread(target=ListenMusic,args=('水手',))
    t2 = threading.Thread(target=RecordBlog,args=('python线程',))
    threads.append(t1)
    threads.append(t2)
    
    if __name__ == '__main__':
        for t in threads:
            # t.setDaemon(True) # 注意:一定在start之前设置,被主进程带走
            t.start()
            # t.join()  #
        # t1.join()
        # t1.setDaemon(True)
    
        # t2.join()########考虑这三种join位置下的结果?
        print ("all over %s" %ctime())
    

    输出:

    Begin listening to 水手. Sat Jun 11 12:43:11 2022
    Begin recording the python线程! Sat Jun 11 12:43:11 2022
    all over Sat Jun 11 12:43:11 2022
    end recording the python线程! Sat Jun 11 12:43:16 2022
    end listening to 水手. Sat Jun 11 12:43:19 2022
    

    2,获取线程名,开启线程的方式一

    import threading
    import time
    
    def sayhi(num):  # 定义每个线程要运行的函数
        print("running on number:%s" % num)
        time.sleep(3)
    
    if __name__ == '__main__':
        t1 = threading.Thread(target = sayhi, args = (1,))  # 生成一个线程实例
        t2 = threading.Thread(target = sayhi, args = (2,))  # 生成另一个线程实例
    
        t1.start()  # 启动线程
        t2.start()  # 启动另一个线程
    
        print(t1.getName())  # 获取线程名
        print(t2.getName())
    

    输出:

    running on number:1
    running on number:2
    Thread-1
    Thread-2
    

    3,开启线程的方式二

    import threading
    import time
    
    
    class MyThread(threading.Thread):
        def __init__(self, num):
            threading.Thread.__init__(self)
            self.num = num
    
        def run(self):  # 定义每个线程要运行的函数
            print("running on number:%s" % self.num)
            time.sleep(3)
    
    if __name__ == '__main__':
        t1 = MyThread(1)
        t2 = MyThread(2)
        t1.start()
        t2.start()
    
        print("ending......")
    

    输出:

    running on number:1
    running on number:2
    ending......
    
  • 相关阅读:
    在返回值拒绝——reference
    传参时,使用引用替换变量
    C++设计与声明——让接口容易被正确使用
    三角函数的天下
    渲染流水线
    设置Shader关键字高亮(网上转)
    平衡二叉树,AVL树之代码篇
    2017-2018-1 20155205 嵌入式C语言——时钟
    GDB基础学习
    20155205 《信息安全系统设计基础》课程总结
  • 原文地址:https://www.cnblogs.com/heris/p/16365750.html
Copyright © 2020-2023  润新知