windows Python多处理CPU绑定并发,无需克隆main

xu3bshqb  于 2023-11-21  发布在  Windows
关注(0)|答案(1)|浏览(160)

我目前正在使用python多处理编写一个CPU绑定脚本。主模块有很多import语句,这些语句在启动新进程时会产生开销。这些导入对于运行程序的并行部分来说是不必要的,所以我不想导入它们。这可以通过将我所有的import语句放在if __name__ == "__main__":中来解决,但是这是一个很大的代码库,一个并行处理模块可以被许多不同经验水平的开发人员使用。(我不想修复一切,也不想让其他人破坏它)。
我想只导入必要的模块来运行代码的并行处理部分。我已经找到了一个解决方法,但它让我觉得......很笨拙。我更新sys.modules并说__main__是并行处理的模块,然后在完成后放回main。例如:

  1. try:
  2. main = sys.modules["__main__"]
  3. sys.modules.update({"__main__": sys.modules[__name__]})
  4. jobs = []
  5. for i in range(5):
  6. p = multiprocessing.Process(target=worker)
  7. jobs.append(p)
  8. p.start()
  9. finally:
  10. sys.modules.update({"__main__": main})

字符串
这段代码运行时只导入所需的模块。但我担心在表面下隐藏着一些可怕的后果。
理想情况下,我希望有一个多处理的替代方案,让我更好地控制在进程生成时克隆的内容。有没有人有一个建议,一个不那么可怕的解决方案,或者让我放心,我的工作并不像我担心的那样可怕?
我使用的是Windows和Python 3.5。
谢谢你,谢谢

6ljaweal

6ljaweal1#

我的猜测是joblib会做得更好,请参阅this very complete discussion了解更多信息。

相关问题