- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用多处理
的Python模块。我正在使用 runpy
从另一个脚本执行此模块。但是,这会导致 (1) 模块运行两次,并且 (2) 多处理
作业永远不会完成(脚本只是挂起)。
在我的最小工作示例中,我有一个脚本runpy_test.py:
import runpy
runpy.run_module('module_test')
和一个目录module_test,其中包含一个空的__init__.py和一个__main__.py:
from multiprocessing import Pool
print 'start'
def f(x):
return x*x
pool = Pool()
result = pool.map(f, [1,2,3])
print 'done'
当我运行runpy_test.py时,我得到:
start
start
并且脚本挂起。
如果我删除 pool.map
调用(或者如果我直接运行 __main__.py,包括 pool.map
调用),我得到:
start
done
我在 Python 2.7.5 中的 Scientific Linux 7.6 上运行它。
最佳答案
重写你的__main__.py
像这样:
from multiprocessing import Pool
from .implementation import f
print 'start'
pool = Pool()
result = pool.map(f, [1,2,3])
print 'done'
然后写一个implementation.py
(您可以随意调用它)其中定义了您的函数:
def f(x):
return x*x
否则,您将在多处理中的大多数接口(interface)上遇到相同的问题,并且与使用 runpy 无关。正如 @Weeble 所解释的,当 Pool.map
尝试加载函数f
在每个子流程中它将导入 <your_package>.__main__
定义函数的位置,但由于您在 __main__
中有模块级别的可执行代码它将被子进程重新执行。
除了这个技术原因之外,这在关注点分离和测试方面也是更好的设计。现在您可以轻松导入和调用(包括出于测试目的)函数 f
无需并行运行。
关于python - 将多处理与 runpy 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288945/
如何将命令行 arge 传递给 runpy。 即如果我能做到 python3 -m foo --arg1=abc 如何在启动进程时将 --arg1=abc 添加为 sys.argv[1]: impor
我有两个文件,一个有我关心的副作用,它发生在 if __name__ == "__main__" 中。 guard : # a.py d = {} if __name__ == "__main__":
我有一个使用多处理的Python模块。我正在使用 runpy 从另一个脚本执行此模块。但是,这会导致 (1) 模块运行两次,并且 (2) 多处理 作业永远不会完成(脚本只是挂起)。 在我的最小工作示例
是否可以从通过 runpy.run_module() 调用的模块中获取退出代码? 我想更换我的 exit_code = subprocess.call('py -m mymodule') 和 runp
当我尝试运行在使用 runpy 加载的文件中定义的方法时出现意外行为模块。这些方法看不到在该方法之外定义的任何变量(包括导入的模块)。这是我的做法: #test.py import runpy env
C:\Users\danie01\fox\test\robotframework>pipenv install Installing dependencies from Pipfile.lock (4
我正在尝试在运行 Linux 的树莓派上安装 Python 模块。我正在使用 Python 2.7.11 并尝试了以下命令: python -m pip 安装计划 python -m easy_ins
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我使用 pip 安装了 $ python get-pip.py 我设置了路径 C:\Program Files\Python\Scripts 然后我重新启动命令提示符以使路径生效。然后我跑 $ p
我已经将 Python 安装到 C:\Python。 我已将以下路径添加到 PATH environment variables : C:\Python C:\Python\Lib\site-pack
这有点复杂,可能需要您花费一些时间。 基本问题是,在 linux(我的测试用例中是 Ubuntu)上,我的程序 (Omnitool) 的 cx-freeze 版本无法创建子进程。但是,它适用于 Win
在尝试使用 bash/activate 在虚拟环境中运行内存分析器 ( https://pypi.python.org/pypi/memory_profiler ) 时,我无法运行任何默认测试代码 p
我是一名优秀的程序员,十分优秀!