zoukankan      html  css  js  c++  java
  • 多线程 -- threading

    • 多线程的调用
      • 直接调用
        import threading
        import time
        
        #定义每个线程要运行的函数
        def my_func(num, **kwargs):
        
            print("%s running on number:%s" % (kwargs['name'], num))
            time.sleep(3)
        
        if __name__ == '__main__':
            #生成一个线程实例
            t1 = threading.Thread(target=my_func, args=(1,), kwargs={'name': 'my_thread'})
            #生成另一个线程实例
            t2 = threading.Thread(target=my_func, args=(2,), kwargs={'name': 'my_thread'})
        
            #启动线程
            t1.start()
            #启动另一个线程
            t2.start()
        
            #获取线程名
            print(t1.getName())
            print(t2.getName())
        
      • 继承式调用
        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()
        
    • IO密集型任务和CPU密集型任务
      • IO密集型任务:任务在执行过程中会有大量的IO阻塞,导致cpu空闲而对内存、磁盘的读写频繁
      • CPU密集型任务:任务执行过程中主要以占用cpu做计算为主,而读写空闲
      • python的多线程在IO密集型任务场景下使用可以缩短时间,提高效率,而在CPU密集型任务场景下却会降低效率并且增加执行的时间
    • 为什么多线程提升不了CPU密集型任务的效率?
      • 这是由于python解释器(Cpython)有一把GIL锁,它限制了多线程只能使用一个cpu计算,多余的cpu无法被使用
    • join()
      • 在子线程完成运行之前,这个子线程的父线程将一直被阻塞
  • 相关阅读:
    主成分分析(PCA)原理及推导
    SVD在推荐系统中的应用详解以及算法推导
    奇异值分解(SVD)原理详解及推导
    jdk1.8源码学习笔记
    #WeakHashMap
    #TreeSet
    如何在Centos7安装swoole的PHP扩展
    Photoshop 使用过程中遇到的问题
    Sublime 配置 Markdown,并实时预览
    移动端响应式布局,rem动态更新
  • 原文地址:https://www.cnblogs.com/dongmengze/p/9549232.html
Copyright © 2011-2022 走看看