• 多线程的创建


    # 1.使用 threading 模块中 Thread 类的构造器创建线程。即直接对类 threading.Thread 进行实例化,并调用实例化对象的 start 方法创建线程。
    # 2.继承 threading 模块中的 Thread 类创建线程类。即用 threading.Thread 派生出一个新的子类,将新建类实例化,并调用其 start 方法创建线程。
    """
    调用 Thread 类的构造器创建线程很简单,直接调用 threading.Thread 类的如下构造器创建线程:
    __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *,daemon=None)
    
    上面的构造器涉及如下几个参数:
        1.group:指定该线程所属的线程组。目前该参数还未实现,因此它只能设为 None。
        2.target:指定该线程要调度的目标方法。
        3.args:指定一个元组,以位置参数的形式为 target 指定的函数传入参数。元组的第一个元素传给 target 函数的第一个参数,元组的第二个元素传给 target 函数的第二个参数……依此类推。
        4.kwargs:指定一个字典,以关键字参数的形式为 target 指定的函数传入参数。
        5.daemon:指定所构建的线程是否为后代线程。
    """
    
    
    #下面调用 Thread 类的构造器创建线程
    import threading
    # 定义一个普通的action函数,该函数准备作为线程执行体
    def action(max):
        for i in range(max):
            # 调用threading模块current_thread()函数获取当前线程
            # 线程对象的getName()方法获取当前线程的名字
            print(threading.current_thread().getName() +  " " + str(i))
    # 下面是主程序(也就是主线程的执行体)
    for i in range(50):
        # 调用threading模块current_thread()函数获取当前线程
        print(threading.current_thread().getName() +  " " + str(i))#打印当前的主线程(MainThread)
        if i == 20:
            # 创建并启动第一个线程
            t1 =threading.Thread(target=action,args=(50,),name='wzy')
            t1.start()
            # 创建并启动第二个线程
            t2 =threading.Thread(target=action,args=(50,),name='hs')
            t2.start()
    print('主线程执行完成!')
    
    """
    1.默认情况下,主线程的名字为 MainThread,用户启动的多个线程的名字依次为 Thread-1、Thread-2、Thread-3、...、Thread-n 等。
    
    2.虽然上面程序只显式创建并启动了两个线程,但实际上程序有三个线程,即程序显式创建的两个子线程和主线程。前面己经提到,当 Python 程序开始运行后,
    程序至少会创建一个主线程,主线程的线程执行体就是程序中的主程序(没有放在任何函数中的代码)
    
    3.在进行多线程编程时,不要忘记 Python 程序运行时默认的主线程,
    主程序部分(没有放在任何函数中的代码)就是主线程的线程执行体。
    
    4.此时程序中共包含三个线程,这三个线程的执行没有先后顺序,它们以并发方式执行:
    Thread-1 执行一段时间,然后可能 Thread-2 或 MainThread 获得 CPU 执行一段时间,
    接下来又换其他线程执行,这就是典型的线程并发执行,
    CPU 以快速轮换的方式在多个线程之间切换,从而给用户一种错觉,即多个线程似乎同时在执行。
    """
    #2.通过继承Thread类来创建子线程
    """
    通过继承 Thread 类来创建并启动线程的步骤如下:
    定义 Thread 类的子类,并重写该类的 run() 方法。
    run() 方法的方法体就代表了线程需要完成的任务,因此把 run() 方法称为线程执行体。
    创建 Thread 子类的实例,即创建线程对象。
    调用线程对象的 start() 方法来启动线程。
    """
    import threading
    # 通过继承threading.Thread类来创建线程类
    class sThread(threading.Thread):
        def __init__(self): 
            threading.Thread.__init__(self)
            self.i = 0
        # 重写run()方法作为线程执行体
        def run(self): 
            while self.i < 100:
                # 调用threading模块current_thread()函数获取当前线程
                # 线程对象的getName()方法获取当前线程的名字
                print(threading.current_thread().getName() +  " " + str(self.i))
                self.i += 1
    # 下面是主程序(也就是主线程的执行体)
    for i in range(100):
        # 调用threading模块current_thread()函数获取当前线程
        print(threading.current_thread().getName() +  " " + str(i))
        if i == 20:
            # 创建并启动第一个线程
            s1 = sThread()
            s1.start()
            # 创建并启动第二个线程
            s2 = sThread()
            s2.start()
    print('主线程执行完成!')
  • 相关阅读:
    类属性、实例属性
    多态
    重载
    多继承
    继承介绍以及单继承
    析构
    构造
    self
    方法
    属性
  • 原文地址:https://www.cnblogs.com/jzxs/p/11415166.html
Copyright © 2020-2023  润新知