运行实例列表的方法

时间:2017-11-30 16:47:58

标签: python multithreading list multiprocessing

我试图运行一个实例列表的方法,但不知道如何除了顺序运行它们。

我有一个同一个对象的实例列表:

class myclass(object):
   def __init__(xxx):
      ...
   def method(a, b):
      do something using a and b, 
      a and b will not be modified, 
      also no return value.

对于列表mylist中的每个实例,我想mylist[i].method(a,b)

我可以更有效地执行此操作,除非按顺序运行它们。 请注意,ab不是全局的,但需要传递。

1 个答案:

答案 0 :(得分:0)

鉴于您提供的详细信息,最简单的方法可能是创建一个允许使用ThreadPool.map的包装函数。

由于您提到不会修改ab,因此我将它们用作“全局范围”变量。如果不是,您将需要找到另一种方法将它们传递给每个线程,可能使用.apply允许您将任意参数传递给已执行的函数。

from multiprocessing.pool import ThreadPool

a, b = 1, 2

class A:
    def method(self, a, b):
        print(a, b)

def wrapper(a_object):
    a_object.method(a, b)

objects = [A() for _ in range(5)]

pool = ThreadPool()  # with no arguments this will create N threads,
                     # N being the number of CPUs that Python detects.
pool.map(wrapper, objects)
#  1 2
#  1 2
#  1 2
#  1 2
#  1 2