python创建线程传参误区记录

创建线程可以使用threading模块中的Thread子类

其中Thread子类允许的参数如下:

(self, group=None, target=None, name=None, args=(), kwargs=None, *,daemon=None)

这个构造方法中,所有参数都是可选参数,即可以使用,也可以忽略。其中各个参数的含义如下:

group:指定所创建的线程隶属于哪个线程组(此参数尚未实现,无需调用);

target:指定所创建的线程要调度的目标方法(最常用);

args:以元组的方式,为 target 指定的方法传递参数;

kwargs:以字典的方式,为 target 指定的方法传递参数;

daemon:指定所创建的线程是否为后代线程。

这里主要记住三个参数(或者说两个),一个是target,另外是 args和 kwargs中的一个或者两个;

这里以args方式做个举例:

from threading import Thread

td02 = Thread(target=self.GitlabInfoget_local,args=(IP,Token)) #当设置为setDaemon(False)时(默认为False)。主线程需要等待子线程的结束才能结束;当设置为setDaemon(True)时,该线程为守护线程,主线程结束时,子线程会随之被回收。 td02.setDaemon(1) td02.start()

注意这里,使用了args,以元组的方式传递参数;这是正确传递参数的方式。

那么如果错误传参会怎么样呢?(亲测,有卡死风险,原因是线程启动前目标函数就已经启动了,在目标函数结束前都不会正常响应

td02 = Thread(target=self.GitlabInfoget_local(IP,Token)) 

#注意这里的传参方式,是在调用目标函数的时候,就直接给了参数,这会导致目标函数会立即启动,而不会等待线程拉起后再执行;

td02.setDaemon(1)
td02.start()

 

posted @ 2023-03-08 17:10  No九五二七9527  阅读(63)  评论(0)    收藏  举报