gpt4 book ai didi

python - python中线程数的最大限制

转载 作者:行者123 更新时间:2023-11-28 19:04:05 27 4
gpt4 key购买 nike

我在 python 中使用线程模块。如何知道我的系统上可以有多少个最大线程?

最佳答案

I am using Threading module in python. How to know how many maxthreads I can have on my system?

我发现似乎没有硬编码或可配置的 MAX 值,但绝对有一个限制。运行以下程序:

import threading
import time


def mythread():
time.sleep(1000)

def main():
threads = 0 #thread counter
y = 1000000 #a MILLION of 'em!
for i in range(y):
try:
x = threading.Thread(target=mythread, daemon=True)
threads += 1 #thread counter
x.start() #start each thread
except RuntimeError: #too many throws a RuntimeError
break
print("{} threads created.\n".format(threads))

if __name__ == "__main__":
main()

我想我应该提到这是使用 Python 3。

第一个函数 mythread() 是将作为线程执行的函数。它所做的只是休眠 1000 秒,然后终止。

main() 函数是一个 for 循环,它尝试启动一百万个线程。 daemon 属性设置为 True,这样我们就不必手动清理所有线程。

如果无法创建线程,Python 会抛出一个RuntimeError。我们捕获它以 break 退出 for 循环并显示成功创建的线程数。

因为 daemon 设置为 True,所有线程在程序结束时终止。

如果连续运行几次,您可能会发现每次都会创建不同数量的线程。在我发布此回复的机器上,我在一次运行中最少有 18,835,而在另一次运行中最多有 18,863。您对代码的修改越多,例如,为了试验或查找更多信息而添加的代码越多,您会发现可以/将会创建的线程越少。

那么,如何将其应用到现实世界中。

嗯,服务器可能需要启动三位数线程的能力,但在大多数其他情况下,如果您认为将要生成大量线程,则应重新评估您的游戏计划。

如果您使用 Python,您需要考虑一件事:如果您使用的是 Python 的标准发行版,您的系统一次只会执行一个 Python 线程,包括程序的主线程,因此添加更多在 Python 中使用线程模块时,为您的程序添加线程或为您的系统添加更多内核并不能真正为您带来任何好处。您可以研究关于 GIL/Global Interpreter Lock 的所有迂腐的细节和 ultracrepidarian 的意见,以获取更多信息。

这意味着受 cpu 限制(计算密集型)的代码并不能从将其分解到线程中获得很大好处。

然而,I/O 绑定(bind)(等待文件读/写、网络读取或用户 I/O)代码从多线程中受益匪浅!因此,为基于 Python 的服务器的每个网络连接启动一个线程。

线程也非常适合在设定的时间段触发/抛出/引发信号,或者只是更逻辑地阻止代码的处理部分。

关于python - python中线程数的最大限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48970857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com