Windows 上的最小线程堆栈大小可能至少为 64kB。 报价:
The operating system rounds up the specified size to the nearest multiple of the
system's allocation granularity (typically 64 KB). To retrieve the allocation
granularity of the current system, use the GetSystemInfo function.
所以尝试将其设置为 32kB 可能看起来很像尝试将其设置为 64kB。
此外,CPythonthreading.stack_size
在 Windows 上实现,因此它只控制最初提交的堆栈。它不会尝试控制堆栈的保留内存。从同一位置:
The reserved memory size represents the total stack allocation in virtual memory.
这意味着您的每个线程都会用完虚拟内存中的保留内存大小。您没有提到在遇到错误之前您设法创建了多少线程,但我怀疑这足以耗尽您进程中的可寻址内存(即使您在 Windows 7 x86-64 上运行它也可能是一个 32 位进程因为 CPython 构建/分发是 x86(-32))。
也就是说,即使您(您的线程)没有使用内存,并且即使您在系统上有更多的物理内存,Python 也无法使用其微小的 32 位指针来处理额外的内存,因此新线程超出了您的限制。重新遇到不能分配他们的保留内存(因为没有地址可以分配给它)。
如果您希望能够更改每个线程保留的内存,那么您可能需要调用CreateThread
或_beginthreadex
不同于 CPython 调用它。这可能意味着需要更改 CPython。
也就是说,冒着让你对我大喊大叫的风险,我严重怀疑你需要的不仅仅是你已经可以创建的 1500 个线程。