PyCharm Python线程

问题描述 投票:0回答:1

我正在运行一个试图使用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发生了显着变化,但是这个数目仍然是不变的?这使我得出结论,硬件限制不是问题,这也使我彻底完全困惑。

可能是什么原因导致的,如何解决?

python multithreading pycharm threadpoolexecutor
1个回答
0
投票

如果没有配置和代码的所有详细信息,很难说,但是我的猜测是,某些类型的内存缺少了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))
© www.soinside.com 2019 - 2024. All rights reserved.