如何在Python中确定合理的线程数量?

3 投票
3 回答
3196 浏览
提问于 2025-04-17 16:58

我正在写一个简单的脚本,这个脚本需要进行很多检查。每个检查都是独立的,所以我决定把它们放到多个线程里去执行。不过,我不太清楚这个脚本会运行在什么样的机器上。为了检查目标机器的一些基本参数,我已经找到了一些不错的工具,但我想知道有没有办法确定一个合理的线程数量上限(也就是说,什么时候再新建线程反而会让处理速度变慢,而不是加快速度)?

3 个回答

0

你可能在最后一句话里找到了答案。你可以测量程序执行的时间,因为这个时间会随着线程的增加而变化。然后你可以根据这个时间,灵活地增加或减少线程(并把被移除线程的任务重新排队),这样就能保持你想要的执行时间。如果你想深入了解,可以看看控制理论

2

在Python中,使用线程来提高速度并不是个好主意,特别是当你的程序需要大量计算时。因为Python有个叫做全局解释器锁(GIL)的东西,它会限制你利用多个CPU的能力,这样就无法从线程中获得预期的性能提升(虽然在实际情况中,结果可能会有所不同)。

如果你需要进行真正独立的“检查”,那么使用多进程会更有效。

4

你可以通过以下方式查看你目标机器有多少个核心:

import multiprocessing

multiprocessing.cpu_count()

如果你选择使用 multiprocessing 来管理你的任务,那么你可以根据系统的负载和 .cpu_count() 来设置 Pool 的大小,也就是工作线程的数量。

至于你应该为你的程序选择一个什么样的数字,那就得你自己决定了 :-)

撰写回答