Windows 上的标准 行为是在生成时将模块导入子进程。multiprocessing
__main__
对于有很多导入的大型项目,这会显着减慢子进程的启动速度,更不用说消耗的额外资源了。对于子进程将运行仅使用这些导入的一小部分的自包含任务的情况,这似乎非常低效。
有没有办法明确指定子进程的导入?如果不是多处理库,还有其他选择吗?
虽然我对 Python 3 特别感兴趣,但 Python 2 的答案可能对其他人有用。
编辑
我已经确认Lie Ryan 建议的方法有效,如以下示例所示:
import sys
import types
def imports():
for name, val in globals().items():
if isinstance(val, types.ModuleType):
yield val.__name__
def worker():
print('Worker modules:')
print('\n'.join(imports()))
if __name__ == '__main__':
import multiprocessing
print('Main modules:')
print('\n'.join(imports()))
print()
p = multiprocessing.Process(target=worker)
p.start()
p.join()
输出:
Main modules:
builtins
sys
types
multiprocessing
Worker modules:
sys
types
if __name__ == '__main__'
但是,我认为我不能仅仅为了在代码库中启用一个小功能而向我的团队的其他成员出售顶级脚本。仍然希望有一种方法可以在没有顶级更改的情况下做到这一点。