Python多线程疑问:为何thread1每秒递增x、thread2每2秒翻倍x?
线程执行间隔差异的原因解释
示例代码
import threading import time x = 1 # 第一个线程,接收一个参数 def thread1(param): global x while True: x = x + 1 print("This is thread 1. x is %d" % x) time.sleep(param) # 第二个线程,接收两个参数 def thread2(param1, param2): global x while True: x = x * 2 print("This is thread 2. Param 2 is %d. x is %d" % (param2, x)) time.sleep(param1) # 创建并启动第一个线程 th1 = threading.Thread(target = thread1, args = [1, ]) th1.start() # 创建并启动第二个线程 th2 = threading.Thread(target = thread2, args = [2, 123]) th2.start()
运行输出

原因解释
两个线程的执行间隔差异,完全由代码中time.sleep()函数的参数以及线程创建时传入的参数决定:
thread1 每秒执行递增
创建th1线程时,通过args = [1, ]给thread1函数传入了参数1。在thread1的无限循环里,每次完成x += 1的递增操作后,会调用time.sleep(param)——这里的param就是传入的1,表示线程会暂停1秒,之后再次进入循环执行递增,因此表现为每秒操作一次。thread2 每2秒执行翻倍
创建th2线程时,args = [2, 123]给thread2函数传入了两个参数:param1=2、param2=123。在thread2的无限循环里,每次完成x *= 2的翻倍操作后,调用time.sleep(param1)——这里的param1是传入的2,意味着线程会暂停2秒后才进入下一次循环,所以每2秒执行一次翻倍。
简单来说,time.sleep(n)的作用就是让当前线程暂停指定的n秒,暂停结束后才会继续执行后续代码,这就是两个线程操作间隔不同的核心原因。
内容的提问来源于stack exchange,提问作者Rebecca Pang
相关产品推荐
相关产品推荐

