python中线程数的最大限制

时间:2018-02-25 06:27:21

标签: python multithreading

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

2 个答案:

答案 0 :(得分:1)

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

我从未发现过似乎没有硬编码或可配置的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 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的所有详细信息和超crecrepidarian意见,以获取更多信息。

这意味着cpu绑定(计算密集型)代码不会因将其分解为线程而大大受益。

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

线程还可以很好地在设定的时间触发/引发/引发信号,或者只是更逻辑地阻止代码的处理部分。

答案 1 :(得分:0)

通常,您不希望计算机上的线程多于CPU内核。

为了知道您的计算机有多少个CPU内核,请使用:(对于Windows,是;对于Linux,我不知道,但是可能有点类似

import multiprocessing   #standard in python 3

print(multiprocessing.cpu_count())