这是joblib parallel的常用用法
import numpy as np
from joblib import Parallel, delayed
def is_memmap(obj):
return isinstance(obj, np.memmap)
Parallel(n_jobs=2, max_nbytes=1e6)(
delayed(is_memmap)(np.ones(int(i))) for i in [1e2, 1e4, 1e6])
我需要在函数 is_memmap 中使用到数据库的连接,但是该连接无法在工作人员之间共享,因此我必须在输入连接时打开连接,在退出时关闭连接它:
def is_memmap(obj):
# open connection
# do something
# close connection
return isinstance(obj, np.memmap)
,因为joblib将创建一个工作池并重新使用它。当joblib创建工作池时,可以为每个线程/进程打开连接吗?。
所以我不必多次打开/关闭连接。
这就是我想要的:
def is_memmap(obj):
# **connection is already open, I can use it with a magic varaible**
# do something
# conection will close after all work is done. no need close it here.
return isinstance(obj, np.memmap)