使用以下代码,我发现multiprocessing.pool.ThreadPool
的最大大小为11689(在我的机器上)。如果我把它变大,我会得到
RuntimeError:无法启动新线程
有人可以解释这是从哪里来的吗? 11689看起来像一个奇怪的系统常数...所以也许我用完了资源?
请注意:这不是关于如何为线程池选择最佳线程数。这个问题是关于11689的来源?
答案 0 :(得分:0)
简要介绍CPython源代码处理threads表明,当线程创建失败时,解释器不会delving into details太多。它只会提高你看到的RuntimeError。
根据pthread_create
联机帮助页,线程创建可能会失败,并显示以下错误代码和原因。
EAGAIN创建另一个线程的资源不足。
EAGAIN遇到系统强加的线程数限制。有许多限制可能会触发此错误:RLIMIT_NPROC软资源限制(通过setrlimit(2)设置),这限制了pro-的数量 达到了真实用户ID的cesses和线程;已达到内核对进程和线程数量的系统范围限制/ proc / sys / kernel / threads-max(参见proc(5));或者最大PID数, 达到/ proc / sys / kernel / pid_max(参见proc(5))。
...
我的盲目猜测是你遇到了第一个问题,而不是第二个问题。您可能正在耗尽内存以分配新线程。
可以在this link找到有关线程创建失败方式的更深入解释。
这是一个盲目的猜测。解释器更冗长的错误处理肯定会有所帮助。