全局、类和并行Python

全局、类和并行Python,python,class,globals,parallel-python,Python,Class,Globals,Parallel Python,我已经阅读了几个小时关于globals=globals()如何在并行Python上工作,我仍然有点困惑,也许你可以帮助我。。。我正在写一段代码,基本上可以概括为: import pp class Foo(object): def __init__(self): self.h = 2 def f(): foo = Foo() return foo.h ppservers = () job_server = pp.Server(ppservers=pps

我已经阅读了几个小时关于globals=globals()如何在并行Python上工作,我仍然有点困惑,也许你可以帮助我。。。我正在写一段代码,基本上可以概括为:

import pp

class Foo(object):
    def __init__(self):
        self.h = 2

def f():
    foo = Foo()
    return foo.h

ppservers = ()
job_server = pp.Server(ppservers=ppservers)
#print globals()
g = job_server.submit(f, (), globals = globals())
r = g()
输出为“未定义全局名称‘Foo’”,正如我之前遇到的一些其他名称一样。。。我知道globals参数用于以一种简化的方式将函数和类传输到服务器,因此我希望它在执行job_server.submit指令之前已经传递了Foo()类,就像在全局变量中一样(您可以通过取消对print globals()指令的注释看到)

关于PP,我遗漏了什么我应该知道的?有没有办法让这段代码在没有太多更改的情况下运行

感谢阅读我的文章,我希望你们中的一些人了解这是如何工作的


(备注:我不想在并行化作业之外创建Foo实例,因为初始化实例会触发整个程序,而整个程序位于init(self)函数中……我知道这是个坏主意……)

这是一个围绕着能够让
pp
跟踪并正确关联代码依赖项的问题
pp
检查传入
submit
(即
f
)的第一个对象,并提取源代码…然后将其传递给其他进程。它还传入在
globals
中传入的任何其他对象。然而,
pp
主要跟踪函数、类和模块——它在处理实例和许多其他对象时遇到问题

如果您使用名为
ppft
pp
分叉(它作为
pp
导入),它应该可以正常工作
ppft
使用更好的代码检查包(
dill.source
from
dill
),从范围更广的python对象和更复杂的依赖项中提取源代码

>>> import pp
>>> class Foo(object):
...   def __init__(self):
...     self.h = 2
... 
>>> def f():
...   foo = Foo()
...   return foo.h
... 
>>> ppservers = ()
>>> job_server = pp.Server(ppservers=ppservers)
>>> g = job_server.submit(f, (), globals=globals())
>>> r = g()
>>> r
2
获取
ppft
此处:

它也是可安装的