导入
创建线程
本课程演示了如何在 Python 中创建线程。
创建线程
我们可以使用 Thread 类在 Python 中创建线程。线程类的构造函数如下所示:
Thread 构造函数
1Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
group 参数保留用于未来扩展。target 是要创建的线程将执行的代码,它可以是任何可调用对象。可调用对象可以是一个函数,也可以是具有 __call__ 方法的类对象。接下来,我们可以将参数通过元组形式传给 args,或通过字典形式使用 kwargs 传递关键字参数。最后,构造函数接收一个布尔值,用于指定创建的线程是否应作为守护线程处理。
下面的代码片段使用 Thread 类的构造函数创建了一个线程:
创建线程
1from threading import Thread 2from threading import current_thread 3 4 5def thread_task(a, b, c, key1, key2): 6 print("{0} 接收到的参数:{1} {2} {3} {4} {5}".format(current_thread().getName(), a, b, c, key1, key2)) 7 8 9myThread = Thread(group=None, # 保留 10 target=thread_task, # 可调用对象 11 name="demoThread", # 线程名称 12 args=(1, 2, 3), # 传递给目标函数的参数 13 kwargs={'key1': 777, 14 'key2': 111}, # 关键字参数字典 15 daemon=None # 设置为 True 可使线程成为守护线程 16 ) 17 18myThread.start() # 启动线程 19 20myThread.join() # 等待线程完成
上述代码如下所示,可直接运行:
1from threading import Thread 2from threading import current_thread 3 4 5def thread_task(a, b, c, key1, key2): 6 print("{0} 接收到的参数:{1} {2} {3} {4} {5}".format(current_thread().getName(), a, b, c, key1, key2)) 7 8 9myThread = Thread(group=None, # 保留 10 target=thread_task, # 可调用对象 11 name="demoThread", # 线程名称 12 args=(1, 2, 3), # 传递给目标函数的参数 13 kwargs={'key1': 777, 14 'key2': 111}, # 关键字参数字典 15 daemon=None # 设置为 True 可使线程成为守护线程 16 ) 17 18myThread.start() # 启动线程 19 20myThread.join() # 等待线程完成
线程对象创建后,必须通过调用 start() 方法来启动它。启动后,线程将开始执行目标函数。
主线程
细心的读者会发现,必然存在另一个线程正在执行我们编写用来创建新线程的代码。这个初始线程被称为 主线程。在正常情况下,主线程是启动 Python 解释器时所使用的线程。 下图展示了上述脚本在调试模式下的运行情况。注意调试器下拉菜单中显示了两个线程:
主线程
demoThread

调试器中的主线程和创建的线程