- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Ipython.parallel 中的 loadbalancedview 来调用可迭代对象上的函数,即
from IPython.parallel import Client
from functools import partial
rc = Client()
lview = rc.load_balanced_view()
lview.block = True
def func(arg0, arg1, arg2):
return func2(arg0) + arg1 + arg2
def func2(arg0):
return 2*arg0
answer = lview.map(partial(func, arg1=A, arg2=B), iterable_data)
func 调用 func2 的事实是否会使 func 不能并行执行(即 GIL 是否发挥作用?)我假设当您调用 map 时,每个集群节点都会获取 func 的副本,但它们是否也会获取func2 的副本。此外,我使用 functools.partial 会导致任何问题吗?
最佳答案
Does the fact that func calls func2 make func not be executed in parallel (ie. does the GIL come into play?)
一点也不。 GIL 在这里完全不相关,也与 IPython.parallel 中的并行性无关。 GIL 仅在协调每个引擎内或客户端进程本身内的线程时才会出现。
I assume that when you call map, each cluster node gets a copy of func, but do they also get copies of func2.
它应该,但这实际上是您的代码会出现问题的地方。 IPython 不会自动跟踪闭包以及交互式命名空间中的代码依赖项,因此您将看到:
AttributeError: 'DummyMod' object has no attribute 'func'
这是因为partial(func, arg1=A, arg2=B)
包含对 __main__.func
的引用,不是本地的代码func
本身。当部分到达引擎时,它被反序列化,并且 __main__.func
已请求,但未定义( __main__
是引擎上的交互式命名空间)。您只需确保 func
即可解决此问题和func2
在引擎上定义:
rc[:].push(dict(func=func, func2=func2))
此时,您的 map
应该按预期运行。
如果指示 IPython 使用增强型 pickling 库 dill它将更接近不必手动发送引用文献,但它并不能涵盖所有情况。
关于python - IPython 并行 LoadBalancedView GIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867185/
我使用 Ipython.parallel 中的 loadbalancedview 来调用可迭代对象上的函数,即 from IPython.parallel import Client from fun
我是一名优秀的程序员,十分优秀!