在处理作为类的数据成员的函数时(由于 Pickling 问题),我知道有关多处理模块限制的各种 讨论。
但是在多处理中是否有另一个模块或任何类型的解决方法,它允许类似以下的东西(特别是不强制并行应用函数的定义以存在于类之外)?
class MyClass():
def __init__(self):
self.my_args = [1,2,3,4]
self.output = {}
def my_single_function(self, arg):
return arg**2
def my_parallelized_function(self):
# Use map or map_async to map my_single_function onto the
# list of self.my_args, and append the return values into
# self.output, using each arg in my_args as the key.
# The result should make self.output become
# {1:1, 2:4, 3:9, 4:16}
foo = MyClass()
foo.my_parallelized_function()
print foo.output
注意:我可以很容易地做到这一点,方法是移出my_single_function
类,并将类似的东西传递foo.my_args
给map
ormap_async
命令。但这会将函数的并行执行推到MyClass
.
对于我的应用程序(并行一个大型数据查询,该查询检索、连接和清理每月的数据横截面,然后将它们附加到此类横截面的长时间序列中),在类,因为我的程序的不同用户将实例化具有不同时间间隔、不同时间增量、要收集的不同数据子集等的类的不同实例,这些都应该与该实例相关联。
因此,我希望实例也可以完成并行化的工作,因为它拥有与并行化查询相关的所有数据,并且尝试编写一些绑定到某些参数并存在于外部的 hacky 包装函数将是愚蠢的类(特别是因为这样的函数是非通用的。它需要类内部的各种细节。)