我在Python中使用多处理来运行许多任务。
我这样做:
tasks = multiprocessing.JoinableQueue()
results = multiprocessing.Queue()
# Start consumers
num_consumers = multiprocessing.cpu_count() * 2
consumers = [ Consumer(tasks, results) for _ in range(num_consumers) ]
for w in consumers:
w.start()
然后我有一个属性“Colony”,它有一个蚂蚁列表,全部在__init__
中初始化
for ant in self.colony.ants:
tasks.put(ant)
num_tasks += 1
当我运行所有任务(即方法__call__
)时,每个蚂蚁都会调用它。
我返回self
,当我比较时:
# We wait now for all the ants to finish
tasks.join()
results_list = list()
for _ in range(num_tasks):
results_list.append(results.get())
print (id(results_list[0]),results_list[0].id)
print(id(self.colony.ants[0]),self.colony.ants[0].id)
我得到了
(33524112, 0) (33005072, 0)
所以它是同一只蚂蚁,但是在被消费者调用之后它会创建一个自己的副本?或者我错过了什么。 蚂蚁没有在其他任何地方实例化。
提前致谢