【问题标题】:Python bytecode generated when multiprocessing Pool is called调用多处理池时生成的 Python 字节码
【发布时间】:2014-02-20 21:04:21
【问题描述】:

我编写了一些 Python 2.7 代码,在其中设置了 sys.dont_write_bytecode = True 以防止写入 .pyc 文件。我以前用过很多次都没有问题。

我现在正在使用multiprocessing 开发一个新程序,我注意到在调用Pool 时会生成字节码,而不管字节码变量如何。请帮助我了解原因。

这是工作测试代码:

import sys
sys.dont_write_bytecode = True
from multiprocessing import Pool

# bytecode gets generated when Pool is included
pool = Pool(processes=2)

print 'done'

【问题讨论】:

  • 您考虑过python -BPYTHONDONTWRITEBYTECODE envvar 吗?
  • 我不得不查找这些,但似乎环境变量方法有效。我认为这意味着字节码总是关闭(而不是逐案),但这对我有用。

标签: python python-2.7 multiprocessing


【解决方案1】:

我猜这是因为multiprocessing 产生了新的python 解释器进程,而这个标志只在设置它的进程内有意义。我还猜测它实际上会在 POSIX 系统上工作,其中多处理使用fork(),这可能会保留解释器状态——在我的系统上似乎就是这种情况。而且,我最后的猜测是,避免这些字节码文件可能不是那么容易,因为多处理仅在导入模块后才在 Windows 上运行工作代码,这是创建字节码文件的时刻。但所有这些都只是基于我对解释器和多处理模块如何工作的了解的有根据的猜测——请等待一些真正的答案。

【讨论】:

  • 感谢您的反馈。听起来很合理——至少你给了我一些进一步调查的途径。
猜你喜欢
  • 2018-12-06
  • 2016-12-07
  • 2021-07-24
  • 2020-08-14
  • 2016-11-10
  • 2013-09-09
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多