【问题标题】:How to run the maximum number of threads possible on your computer如何在您的计算机上运行尽可能多的线程
【发布时间】:2020-03-05 01:04:59
【问题描述】:

如何在您的计算机上运行尽可能多的线程? 我想在我的 python 代码中运行最大数量的线程。 我在 Windows 计算机上运行代码。

我想到了以下解决方案:

x = 0
while 1:
    try:
        t = Thread(target=learn, args=(line,)) #writer,))
        thread_list.append(t)
        t.start()
        break
    except Exception as exp:
        time.sleep(1)
        if x == 0:
            print "Waiting for free thread",
            x = 1
        else:
            print ".",

代码运行良好,但几分钟后出现以下错误:

mutex.acquire() #error
with open("output.csv", "ab") as dataset_file:
    writer = csv.writer(dataset_file)
    writer.writerow(dataset)
mutex.release()

mutex.acquire()
AttributeError: 'NoneType' object has no attribute 'acquire'

有没有人有办法修复我的错误或另一种方法来打开最大数量的线程? 谢谢。

【问题讨论】:

    标签: python multithreading python-2.7


    【解决方案1】:

    您可以在 Windows 上运行的最大线程数取决于您拥有多少内存。 Windows 中的每个线程默认消耗 1MB 的 RAM 用于堆栈(加上更多的用于其上下文和一个微小的内核模式堆栈)。对于 32 位应用程序,您可以创建的最大线程数约为 1800,前提是您不分配任何其他内存。换句话说,您可以创建多少线程归结为您的应用程序有多少可用内存。

    但是,您不应该创建太多线程。通常,您的目标应该是拥有与可用内核一样多的线程。创建线程很昂贵,在线程之间切换也是如此。

    【讨论】:

    • 将线程数与内核数相匹配对于其他语言来说是一个很好的建议,因为它允许受 CPU 限制的程序一次使用所有内核,从而可能获得与线程数成正比的加速核心——但请注意,由于 cpython 的全局解释器锁,多线程 python 程序不太可能从多线程中获得任何额外的速度,无论它使用多少线程。
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2020-11-15
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多