【问题标题】:Python multithreading works only a single CPU [duplicate]Python多线程仅适用于单个CPU [重复]
【发布时间】:2018-05-04 17:00:30
【问题描述】:

我正在尝试创建不同的线程来使用 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 multithreading


【解决方案1】:

这是由于 Python GIL(全局解释器锁)。它阻止 Python 线程在单个 CPU 上工作。 您可以在https://wiki.python.org/moin/GlobalInterpreterLock了解更多信息

Python GIL 是一个互斥体,可以保护对 Python 对象的访问,防止多个线程同时执行 Python 字节码。这个锁是必要的,主要是因为 CPython 的内存管理不是线程安全的。

关于这个主题有多个问题,请在SO查看列表

如果您希望您的代码在多个 CPU 上运行,请查看 multiprocessing 模块。

【讨论】:

  • 或者你可以禁用 GIL,但它不那么安全:)
  • @ArtsiomPraneuski 在哪些方面可以安全地禁用 GIL?
  • @ArtsiomPraneuski 这真的不是一个好建议
  • 我在哪里写到这是安全的 :)
  • @Vinny 是的,我知道。这就是我留下微笑的原因:)
猜你喜欢
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多