我试图运行一个实例列表的方法,但不知道如何除了顺序运行它们。
我有一个同一个对象的实例列表:
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)
。
我可以更有效地执行此操作,除非按顺序运行它们。
请注意,a
和b
不是全局的,但需要传递。
答案 0 :(得分:0)
鉴于您提供的详细信息,最简单的方法可能是创建一个允许使用ThreadPool.map
的包装函数。
由于您提到不会修改a
和b
,因此我将它们用作“全局范围”变量。如果不是,您将需要找到另一种方法将它们传递给每个线程,可能使用.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