MST

星途 面试题库

面试题:Python中thread模块的基础应用

请简述Python中thread模块创建线程的基本步骤,并举例说明如何在线程中传递参数。
38.3万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
  1. thread模块创建线程基本步骤

    • 导入thread模块:在Python脚本开头使用import thread语句导入该模块(注意:thread模块在Python 3中已被_thread取代,这里基于其旧版本说明)。
    • 定义线程函数:编写一个函数,这个函数将作为线程执行的任务。
    • 使用thread.start_new_thread()函数启动新线程:该函数接受两个参数,第一个是线程函数名,第二个是传递给线程函数的参数元组(如果没有参数则传递空元组())。
  2. 在线程中传递参数示例

import thread
import time


def print_time(thread_name, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print(f"{thread_name}: {time.ctime(time.time())}")


# 创建两个线程
try:
    thread.start_new_thread(print_time, ("Thread-1", 2))
    thread.start_new_thread(print_time, ("Thread-2", 4))
except:
    print("Error: unable to start thread")
while 1:
    pass

在上述示例中,print_time函数是线程执行的任务,thread.start_new_thread(print_time, ("Thread - 1", 2))中,("Thread - 1", 2)是传递给print_time函数的参数,"Thread - 1"对应thread_name参数,2对应delay参数。同样,另一个线程也传递了不同的参数。

需再次强调,在Python 3中,建议使用_thread模块(与thread模块类似)或更高级的threading模块来处理线程。例如使用threading模块改写上述代码如下:

import threading
import time


def print_time(thread_name, delay):
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print(f"{thread_name}: {time.ctime(time.time())}")


# 创建两个线程
t1 = threading.Thread(target = print_time, args = ("Thread - 1", 2))
t2 = threading.Thread(target = print_time, args = ("Thread - 2", 4))
t1.start()
t2.start()
t1.join()
t2.join()

threading.Thread中,target指定线程执行的函数,args以元组形式传递参数给该函数。join方法用于等待线程完成。