zoukankan      html  css  js  c++  java
  • [b0026] python 归纳 (十一)_线程_threading.Thread

    总结:

    1. 默认父线程跑完,子线程并不会马上退出,不像 thread.start_threadXXXX
    2. 父线程跑完了,并没有退出,一直在那里
    3. 线程启动速度很快,不占多少开销,不到1毫 秒

    代码:

    # -*- coding: utf-8 -*-
    """
    学习 并发
    linux下执行
    """
    from threading import Thread
    from multiprocessing import Process
    import time
    import os
    import psutil
    def work():
        print('%s,%f: sub begin %d' % (time.strftime('%M:%S',time.localtime(time.time())),time.time(),os.getpid()))
        print "%s,%f: sub %d,%d,%d" % (time.strftime('%M:%S',time.localtime(time.time())),time.time(),os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())
    
        time.sleep(5)
    
        print "%s,%f: sub %d,%d,%d" % (time.strftime('%M:%S',time.localtime(time.time())),time.time(),os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())
        print('%s,%f: sub end %d' % (time.strftime('%M:%S',time.localtime(time.time())),time.time(),os.getpid()))
    
    if __name__ == '__main__':
    
        print "%s,%f: main begin" % (time.strftime('%M:%S',time.localtime(time.time())),time.time())
        print "%s,%f: main %d,%d,%d" % (time.strftime('%M:%S',time.localtime(time.time())),time.time(),os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())
        # 开启子线程
        t=Thread(target=work)
        t.start()
        print  '%s,%f: main 线程' %  (time.strftime('%M:%S',time.localtime(time.time())),time.time())
        print "%s,%f: main %d,%d,%d" % (time.strftime('%M:%S',time.localtime(time.time())),time.time(),os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())
    
        # 开启子进程
        # t=Process(target=work)
        # t.start()
        # print "
    main %d,%d,%d" % (os.getpid(),os.getppid(), psutil.Process(os.getpid()).num_threads())
        # print('
    main 进程')
    
        print "%s,%f: main end" % (time.strftime('%M:%S',time.localtime(time.time())),time.time())
    

      

    输出:

    格式说明:

    小时 :秒,时间戳,     <当前进程ID,  [父 进程ID,当前进程线程数量]>

    root@ssmaster:~/python# python test_threadprocess1.py

    ----------------------------------------------------------

    03:04,1536397384.349529: main begin
    03:04,1536397384.349605: main 3604,2692,1
    03:04,1536397384.350838: sub begin 3604
    03:04,1536397384.350939: main 线程
    03:04,1536397384.351009: sub 3604,2692,2
    03:04,1536397384.351310: main 3604,2692,2
    03:04,1536397384.352097: main end
    03:09,1536397389.357353: sub 3604,2692,2   

    03:09,1536397389.358372: sub end 3604

    ----------------------------------------------------------

    输出解读:

    1. 黄色 标记的中间 输出部分 ,是启动 子线程期间,这段 时间非常快,说明启动线程的速度很快
    2. 红色标记,此时main线程的逻辑 代码跑完了,但是还是显示有2个线程,对比开始,说明main线程并 没有退出 
  • 相关阅读:
    深入Android 【一】 —— 序及开篇
    Android中ContentProvider和ContentResolver使用入门
    深入Android 【六】 —— 界面构造
    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the ser
    Dynamic Business代码片段总结
    对文件的BuildAction以content,resource两种方式的读取
    paraview 3.12.0 windows下编译成功 小记
    百度网盘PanDownload使用Aria2满速下载
    netdata的安装与使用
    用PS给证件照排版教程
  • 原文地址:https://www.cnblogs.com/sunzebo/p/9609779.html
Copyright © 2011-2022 走看看