相关疑难解决方法(0)

使用多处理Pool.map()时无法pickle <type'instancemethod'>

我想使用multiprocessingPool.map()功能,同时划分出工作.当我使用以下代码时,它工作正常:

import multiprocessing

def f(x):
    return x*x

def go():
    pool = multiprocessing.Pool(processes=4)        
    print pool.map(f, range(10))


if __name__== '__main__' :
    go()
Run Code Online (Sandbox Code Playgroud)

但是,当我在面向对象的方法中使用它时,它不起作用.它给出的错误信息是:

PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup
__builtin__.instancemethod failed
Run Code Online (Sandbox Code Playgroud)

当以下是我的主程序时会发生这种情况:

import someClass

if __name__== '__main__' :
    sc = someClass.someClass()
    sc.go()
Run Code Online (Sandbox Code Playgroud)

以下是我的someClass课程:

import multiprocessing

class someClass(object):
    def __init__(self):
        pass

    def f(self, x):
        return x*x

    def go(self):
        pool = multiprocessing.Pool(processes=4)       
        print pool.map(self.f, range(10))
Run Code Online (Sandbox Code Playgroud)

任何人都知道问题可能是什么,或者一个简单的方法呢?

python multithreading pool pickle multiprocessing

206
推荐指数
6
解决办法
12万
查看次数

使用多处理将方法并行应用于对象列表

我创建了一个包含许多方法的类.其中一种方法非常耗时,my_process而且我想并行执行该方法.我遇到了Python Multiprocessing - 将类方法应用于对象列表但我不确定如何将它应用于我的问题,以及它将对我的类的其他方法产生什么影响.

class MyClass():
    def __init__(self, input):
        self.input = input
        self.result = int

    def my_process(self, multiply_by, add_to):
        self.result = self.input * multiply_by
        self._my_sub_process(add_to)
        return self.result

    def _my_sub_process(self, add_to):
        self.result += add_to

list_of_numbers = range(0, 5)
list_of_objects = [MyClass(i) for i in list_of_numbers]
list_of_results = [obj.my_process(100, 1) for obj in list_of_objects] # multi-process this for-loop

print list_of_numbers
print list_of_results

[0, 1, 2, 3, 4]
[1, 101, 201, 301, 401]
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

14
推荐指数
1
解决办法
7305
查看次数

Python:从该类中对多个处理类的数据成员的函数进行多处理的高效解决方法

我知道在处理作为类的数据成员的函数时(由于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
Run Code Online (Sandbox Code Playgroud)

注意:我可以通过移动my_single_function到类之外并将类似的东西传递foo.my_argsmapmap_async …

python class multiprocessing

8
推荐指数
2
解决办法
3552
查看次数

标签 统计

multiprocessing ×3

python ×3

class ×1

multithreading ×1

pickle ×1

pool ×1