Python多线程仅作用一个CPU



我正在尝试创建不同的线程以与8个内核一起使用。但是,我看到代码创建了8个线程,但仅在我的MacOS上使用100%。为什么?

def runner(i):
    # do random stuff
    for a in range(0,1000000):
        i+=1
        5000 / 34 * i
        i + 400
        i / 20000
        i * 24440
        i+=1
        5000 / 34 * i
        i + 400
        i / 20000
q = queue.Queue()
threads = list()
for x in range(0,80):
    th = threading.Thread(target=runner,args=(x,))
    threads.append(th)
for th in threads:
    th.start()
for th in threads:
    th.join()

这是由于python gil(全局解释器锁)造成的。它阻止Python线程在单个CPU上使用。您可以在https://wiki.python.org/moin/globalinterpreterlock

上阅读有关它的更多信息。

python gil是一个静音,可保护对Python对象的访问,防止多个线程立即执行Python bytecodes。该锁定是必要的,主要是因为Cpython的内存管理不是线程安全。

有关该主题的多个问题,请在此处查看列表

如果您希望代码在多个CPU上使用,请查看多处理模块。

最新更新