我正在尝试创建不同的线程以与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上使用,请查看多处理模块。