Python 如何从多处理池的初始值设定项中正确释放资源?

Python 如何从多处理池的初始值设定项中正确释放资源?,python,multiprocessing,pool,Python,Multiprocessing,Pool,我正在使用一个多处理池来并行一些昂贵的计算。假设其中一些计算依赖于外部数据,例如硬盘上的文件、网络连接或运行其他编程语言脚本的子进程 我可以使用多处理.Pool中的初始值设定项来初始化这些资源。但是,没有shutdown功能来正确释放资源 举出以下例子: socket=None def init(地址、端口): 全局套接字 socket=magic(地址、端口) def作业(数据): 全局套接字 断言套接字不是无 返回发送(套接字、数据) pool=multi-threading.pool(N,

我正在使用一个多处理池来并行一些昂贵的计算。假设其中一些计算依赖于外部数据,例如硬盘上的文件、网络连接或运行其他编程语言脚本的子进程

我可以使用
多处理.Pool
中的
初始值设定项来初始化这些资源。但是,没有
shutdown
功能来正确释放资源

举出以下例子:

socket=None
def init(地址、端口):
全局套接字
socket=magic(地址、端口)
def作业(数据):
全局套接字
断言套接字不是无
返回发送(套接字、数据)
pool=multi-threading.pool(N,init,[地址,端口])
map(作业,['foo','bar','baz'])
在本例中,如何确保插座正确关闭?或者,在更一般的意义上,对每个工作人员执行一些结束代码

此答案建议了以下解决方法(适用于本例):

导入时间
def销毁(x):
全局套接字
socket.close()
time.sleep(1)#确保此工作进程不会在范围内的两个元素上运行
一无所获
map\u异步(g,范围(N),1)
这看起来有点像黑客。是否有一个更好的选择,不涉及自己重新实现池