2022年 11月 9日

Python 创建和启动线程

创建一个线程有以下两种方式。

  • 直接创建一个 Thread 类对象,并给它的构造函数传递一个可调用的对象(callable object)。
  • 从 Thread 类定义一个派生类,并重载其构造函数__init__()和__run__()方法,然后创建一个该派生线程类的对象并传递一个可调用的对象。
    Thread 类的构造函数:
threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
  • 1

其中,参数 target 就是线程的__run__()方法调用的可调用对象,即线程的执行代码,如果不提供,则线程将什么也不做。参数 name 是这个线程的名字,如果不提供,则系统会提供一个默认的名字。参数 args 和 kwargs 分别是 tuple 和 dict 类型的(可变)参数,即传递给 target 对象的参数。
通过 Thread 类对象的 start()方法可以启动一个线程。Thread 的 start()方法会调用 Thread 的__run__()方法执行构造函数的参数 target 指向的可调用对象,同时将参数 args 和 kwargs 传递给这个target 对象。
下面的代码在主线程中创建了 5 个线程。每个线程的构造函数中接收了一个可调用对象,即函数 worker(args),在该构造函数中,还传递了一个 tuple 对象(i,)作为函数 worker()的参数 args:

#thread_args.py 
import threading 
def worker(args): 
    print('I am a Worker with params %s'%args )
print('This is the main thread!')
threads = [] 
for i in range(5): 
    t = threading.Thread(target=worker,args=(i,))
    threads.append(t)
    t.start()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

输出如下:

This is the main thread! 
I am a Worker with params 0 
I am a Worker with params 1 
I am a Worker with params 2 
I am a Worker with params 3 
I am a Worker with params 4 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6