Python如何同时运行两段含等待的代码?多线程多进程相关疑问
实现方法
你这两段代码都是大部分时间处于休眠等待状态,用多线程实现最简单,改造成本极低,具体步骤和完整可运行代码如下:
- 把两段原有逻辑分别封装成独立的函数,方便线程调用
- 为每个函数创建对应的线程对象
- 启动线程即可同时运行两段逻辑
import time import threading # 对应你第一段3秒累加1的逻辑 def count_number1(): number1 = 1 while True: number1 += 1 # 可以取消下面注释打印数值,方便验证运行效果 # print(f"number1当前值:{number1}") time.sleep(3) # 对应你第二段20秒累加1的逻辑 def count_number2(): number2 = 1 while True: number2 += 1 # 可以取消下面注释打印数值,方便验证运行效果 # print(f"number2当前值:{number2}") time.sleep(20) if __name__ == "__main__": # 创建线程,target参数填要执行的函数名,不要加括号 thread1 = threading.Thread(target=count_number1) thread2 = threading.Thread(target=count_number2) # 启动两个线程 thread1.start() thread2.start() # 等待线程运行结束(因为是死循环,会一直保持运行) thread1.join() thread2.join()
疑问解答
1. 等待多的场景适合多线程还是多进程?
选多线程就足够,完全没必要用多进程。
Python有GIL全局解释器锁,计算密集的场景下多线程确实没法利用多核优势,这种时候才需要用多进程。但你这种大部分时间在等待休眠的场景,线程等待的时候会主动释放GIL,其他线程可以正常运行,完全不会有阻塞问题,而且多线程创建开销小、代码写起来更简单,适配这种场景刚好。多进程对这个场景来说属于性能过剩,额外还有进程间通信、资源开销大的问题,没必要用。
2. 多进程是否可以运行超过CPU核心数量的进程?
可以。
CPU核心数决定的是同一时间可以真正并行运算的进程上限,比如4核CPU同一时间最多同时跑4个进程的运算逻辑。但如果你开的进程数超过核心数,操作系统会通过时间片轮转调度的方式,让多个进程轮流使用CPU资源,功能上完全可以正常运行,只是进程数超过核心数之后,进程切换的额外开销会变高,运算效率不会再提升甚至可能下降,但不会出现无法运行的问题。
内容的提问来源于stack exchange,提问作者user15097055
相关产品推荐
相关产品推荐

