赞
赏
在 Python 中,使用 threading 模块创建多线程有两种方式,即直接使用线程处理函数创建与 继承 threading.Thread 类实现多线程。
使用线程处理函数创建多线程的用法类似于 thread 模块创建多线程,而使用继承 threading.Thread 类实现多线程的本质就是 重写 其中的 run 方法。
threading.Thread(target=run, args=("t1",)).start()
参数 | 描述 |
---|---|
run | 线程处理函数。 |
args | 线程处理函数的参数,必须是元祖类型。 |
直接使用 threading.Thread
就可以开启一个线程,通过 target 关键字参数 指定线程处理 函数,通过 args 关键字参数指定线程处理函数的 参数,该参数必须是 元祖 类型。
class MyThread(threading.Thread):
def __init__(self, params):
pass
def run(self):
pass
t1 = MyThread(params)
t1.start()
通过继承 Thread 类创建多线程其本质就是重写 threading.Thread 类中的 构造函数 与 run 方法。通过此方法创建自定义线程类后,直接实例化该线程类的对象,并调用 start 方法即可开启线程。
使用 threading 模块加上线程处理函数创建多线程
import threading
import time
def handler_haicoder(val):
while True:
print("thread haicoder run, val =", val)
time.sleep(2)
def handler_python(val):
while True:
print("thread python run, val =", val)
time.sleep(3)
def main():
print("嗨客网(www.haicoder.net)")
threading.Thread(target=handler_haicoder, args=("haicoder", )).start()
threading.Thread(target=handler_python, args=("python", )).start()
if __name__ == '__main__':
main()
time.sleep(30)
程序运行后,控制台输出如下:
我们首先创建了一个 main 函数,在 main 函数里面,我们使用 threading.Thread 创建了两个线程,两个线程的线程处理函数分别为:handler_haicoder 与 handler_python。
同时,threading.Thread 的第二个参数必须是一个元祖,该元祖是用于传递到线程处理函数的参数,因此,我们在两个线程处理函数里面,都获取了我们传递过去的参数。最后,运行程序,我们发现,两个线程交替运行。
使用 threading 模块自定义线程类创建多线程
import threading
import time
class MyThread(threading.Thread):
def __init__(self, name, n):
super(MyThread, self).__init__()
self.name = name
self.n = n
def run(self):
while True:
print("Thread ", self.name, "is running")
time.sleep(self.n)
def main():
t1 = MyThread("t1", 3)
t2 = MyThread("t2", 2)
t1.start()
t2.start()
if __name__ == "__main__":
print("嗨客网(www.haicoder.net)")
main()
程序运行后,控制台输出如下:
我们创建了一个类 MyThread,MyThread 类继承自 threading.Thread 类,同时,我们在 MyThread 类里面重写了父类的构造函数和 run 函数。
其中,构造函数,是我们在创建自定义线程实例时会自动调用的函数,而 run 函数是我们自定义线程启动后,系统自动调用执行的函数,就相当于是线程处理函数。
接着,在 main 函数里面,我们创建了两个自定义线程,并分别使用 start 函数启动该两个线程。
在 Python 中,使用 threading 模块创建多线程有两种方式,即直接使用线程处理函数创建与继承 threading.Thread 类实现多线程。
使用线程处理函数创建多线程的用法类似于 thread 模块创建多线程,而使用继承 threading.Thread 类实现多线程的本质就是重写其中的 run 方法。