• Python3 多线程的使用


    多线程

    • 多线程使用的是thread库,多进程使用的是multiprocessing库,建议不要使用多线程进行爬虫。
    • 在Python多线程下,每个线程的执行方式:
      • 获取GIL(Global Interpreter Lock(全局解释器锁))
      • 执行代码直到sleep或者是Python虚拟机将其挂起
      • 释放GIL

    注释:

    1.GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。

    2.每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。)

    多线程的使用方法

    使用Theading模块创建线程

    文档地址:https://docs.python.org/3/library/threading.html

     1.直接实例化threading.Thread线程对象,实现多线程

    实例
    import threading
    import time
    
    
    def print_age(who, age):
        """
        需要用多线程调用的函数
        :param who:
        :param age:
        :return:
        """
        print("Hello,every one!")
        time.sleep(1)
        print("%s is %s years old !" % (who, age))
    
    if __name__ == "__main__":
        t1 = threading.Thread(target=print_age, args=("jet", 18, ))     # 创建线程1
        t2 = threading.Thread(target=print_age, args=("jack", 25, ))    # 创建线程2
        t3 = threading.Thread(target=print_age, args=("jack", 25,))     # 创建线程3
        t1.start()    # 运行线程1
        t2.start()    # 运行线程2
        t3.start()    # 运行线程3
        print("over...")
    

    2.通过继承threading.Thread,并重写run()方法,来实现多线程

    import threading
    import time
    
    
    class MyThread(threading.Thread):
        """
        使用继承的方式实现多线程
        """
        def __init__(self, who):
            super().__init__()    # 必须调用父类的构造方法
            self.name = who
    
        def run(self):
            print("%s is run..." % self.name)
            time.sleep(3)
    
    if __name__ == "__main__":
        t1 = MyThread("Jet")    # 创建线程1
        t2 = MyThread("Jack")   # 创建线程2
        t1.start()              # 运行线程1
        t2.start()              # 运行线程2
        print("over...")
    
  • 相关阅读:
    zabbix-agent报错记录
    远程执行命令恢复
    触发器例子
    自定义监控项
    监控项更新间隔
    python paramiko登陆设备
    python爬取某站磁力链
    python网络编程
    并发爬取网站图片
    Pandas Series和DataFrame的基本概念
  • 原文地址:https://www.cnblogs.com/spmt/p/10529032.html
Copyright © 2020-2023  润新知