我正在运行一个试图使用Python的ThreadPoolExecutor打开1000个线程的程序,该程序已配置为最多允许1000个线程。在具有4GB内存的Windows机器上,在出现运行时错误:can't start new thread
之前,我可以启动〜870个线程。有了16GB的内存,我也可以启动870个线程,尽管两分钟后发生了运行时错误can't start new thread
。所有线程都在运行while循环,这意味着它们将永远无法完成任务。这是意图。
为什么是PyCharm / Windows / Python,无论是罪魁祸首,我尝试启动的1000个线程中的870个都无法启动,尽管RAM发生了显着变化,但是这个数目仍然是不变的?这使我得出结论,硬件限制不是问题,这也使我彻底完全困惑。
可能是什么原因导致的,如何解决?
如果没有配置和代码的所有详细信息,很难说,但是我的猜测是,某些类型的内存缺少了Windows。我建议在this article中查看详细信息:
我尝试在Linux机器上复制Pycharm和python3.8的问题,并使用以下代码制作了10000个线程。请注意,每个线程在创建时都会休眠一段时间,否则线程创建过程会减慢速度,因为试图使这些线程执行的主线程变得CPU匮乏。我有32GB的RAM,但是在Linux上使用ThreadPoolExecutor可以创建10000个线程。
from concurrent.futures import ThreadPoolExecutor
import time
def runForever():
time.sleep(10)
while True:
for i in range(100):
a = 10
t = ThreadPoolExecutor(max_workers=10000)
for i in range(10000):
t.submit(runForever)
print(len(t._threads))
print(len(t._threads))