You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:25:17