第十章:使用进程、线程和协程提供并发性-threading:进程中管理并发操作-派生线程

10.3.5 派生线程
开始时,Thread要完成一些基本初始化,然后调用其run()方法,这会调用传递到构造函数的目标函数,要创建Thread的一个子类,需要覆盖run()来完成所需的工作。

import threading
import logging


class MyThread(threading.Thread):

    def run(self):
        logging.debug('running')

logging.basicConfig(
    level=logging.DEBUG,
    format='(%(threadName)-10s) %(message)s',
    )

for i in range(5):
    t = MyThread()
    t.start()

run()的返回值将被忽略。
运行结果:
在这里插入图片描述
由于传递到Thread构造函数的args和kwargs值保存在私有变量中(这些变量名都有前缀"__"),所以不能很容易地从子类访问这些值。要向一个定制的线程类型传递参数,需要重新定义构造函数,将这些值保存在子类可见的一个实例属性中。

import threading
import logging

class MyThreadWithArgs(threading.Thread):

    def __init__(self,group=None,target=None,name=None,
                 args=(),kwargs=None,*,daemon=None):
        super().__init__(group=group,target=target,name=name,
                         daemon=daemon)
        self.args = args
        self.kwargs = kwargs

    def run(self):
        logging.debug('running with %s and %s',
                      self.args,self.kwargs)

logging.basicConfig(
    level=logging.DEBUG,
    format='(%(threadName)-10s) %(message)s',
    )

for i in range(5):
    t = MyThreadWithArgs(args=(i,),kwargs={'a':'A','b':'B'})
    t.start()

MyThradWithArgs使用的API与Thread相同,不过类似于其他定制类,这个类可以轻松地修改构造函数方法,以取得更多参数或者与线程用途更直接相关的不同参数。
运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/89597735