Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 识别不同流程返回的元素_Python_Multiprocessing - Fatal编程技术网

Python 识别不同流程返回的元素

Python 识别不同流程返回的元素,python,multiprocessing,Python,Multiprocessing,考虑以下情况: class A: def __init__(self): self.b_list = [] def add_element(b) self.b_list.append(b) class B: def __init__(self,x): self.x = x class C: def __init__(self,a,other_data): self.a = a def find_new_b(sel

考虑以下情况:

class A:
   def __init__(self):
      self.b_list = []

   def add_element(b)
      self.b_list.append(b)

class B:
   def __init__(self,x):
      self.x = x

class C:
   def __init__(self,a,other_data):
      self.a = a
   def find_new_b(self):
      ....


def solve(c):
   return c.find_new_b()
类A的每个实例都有一个以增量方式添加的类B实例列表

我需要迭代类A的所有实例,并为每个实例找到类B的新元素

我正在使用多处理来做到这一点

list_of_c_elements = [...]
pool = multiprocessing.Pool()
results = pool.map(solve, list_of_c_elements)
问题

在results中,我有一个结果列表,我想了解B类的新实例属于a类的哪个实例。类B的每个实例都是泛型的,我希望这两个类保持解耦

深思熟虑的解决方案

更改为:

我必须将A类的所有元素与返回的非常低效的元素进行比较。 我不能这样做:

for output in results:
   output[0].add_element(output[1])
因为返回的类A的实例是另一个实例


有没有更有效的方法来实现我的目标?

C还可以在成员中保存ida,如果需要,您可以生成索引字典{ida:a}。请注意,所有id调用当然必须发生在主进程中,才能产生可用的结果。

对于第二个考虑的解决方案,因为返回的类型A的对象是另一个对象,所以不能使用它是什么意思?在一次迭代中,我可以多次调用同一类型A的对象的解算,并为同一对象获得两个以上的结果。因此,使用返回的输出[0]并执行输出[0]。为结果中的每个元素添加_b_element输出[1]将添加到2个不同的类型为A的对象。那么您是说_c_元素列表中可以有重复的c实例?似乎无论你做什么,避免两次添加b元素都是一个问题。注意,类A没有名为add_b_element的方法。元素列表包含c实例。每个C实例都是使用类A的一个实例和其他参数创建的。调用solve为需要添加到同一个A实例的两个或多个C实例中的每个实例返回一个元素。b元素应该添加到哪两个C实例?solve只传递一个C参数。
for output in results:
   output[0].add_element(output[1])