我有一个模型,我从 Python 中多次调用它。该模型需要很长时间才能启动和关闭,但处理输入数据的时间很短(可以在启动/关闭之间多次完成)。多处理 Pool() 似乎是完成此任务的好方法,但我无法让 Model() 类正确销毁。
下面给出了程序代码的简化结构。实际上,init 和 del 函数需要用 win32com.client 模块做一些巧妙的事情,而 model.y 变量是控制外部应用程序的句柄。
#!/usr/bin/env python
import multiprocessing
import random
import time
class Model():
def __init__(self):
self.y = random.randint(0,5) # simplification
time.sleep(5) # initialisation takes a while...
def __del__(self):
del(self.y) # simplification
time.sleep(1) # destruction isn't especially quick either
def init():
global model
model = Model()
def f(x): # worker function, runs quickly
return model.y * x ** 2
def main():
pool = multiprocessing.Pool(processes=2, initializer=init)
it = pool.imap(f, range(4))
for n in range(4):
print it.next()
pool.close()
if __name__ == '__main__':
main()
模型()从不调用 del 函数,我猜是因为垃圾收集器中保存了一些引用。如何确保模型在程序结束时正确关闭?