我有 5 个独立的函数要并行执行:
# Defining the BO acquisition function
acquisition_function = UtilityFunction(kind="ei",xi=1e-1)
# Defining a wrapper function that calls maximize - wilson
def wilson_wrapper():
print('in wilson wrapper')
wilson_optimizer.maximize(
n_iter=n_iter_BO,
init_points=init_points_BO,
acquisition_function=acquisition_function
)
# Defining a wrapper function that calls maximize - wong
def wong_wrapper():
print('in wong wrapper')
wong_optimizer.maximize(
n_iter=n_iter_BO,
init_points=init_points_BO,
acquisition_function=acquisition_function
)
# Defining a wrapper function that calls maximize - jansen
def jansen_wrapper():
print('in jansen wrapper')
jansen_optimizer.maximize(
n_iter=n_iter_BO,
init_points=init_points_BO,
acquisition_function=acquisition_function
)
# Defining a wrapper function that calls maximize - larter
def larter_wrapper():
print('in larter wrapper')
larter_optimizer.maximize(
n_iter=n_iter_BO,
init_points=init_points_BO,
acquisition_function=acquisition_function
)
# Defining a wrapper function that calls maximize - kuramoto
def kuramoto_wrapper():
print('in kuramoto wrapper')
kuramoto_optimizer.maximize(
n_iter=n_iter_BO,
init_points=init_points_BO,
acquisition_function=acquisition_function
)
在 jupyter 笔记本中。出于某种原因,当我尝试以这种方式将每个定义为一个过程时:
from multiprocess import Process
if __name__ == '__main__':
wilson_process = Process(target=wilson_wrapper)
wong_process = Process(target=wong_wrapper)
jansen_process = Process(target=jansen_wrapper)
larter_process = Process(target=larter_wrapper)
kuramoto_process = Process(target=kuramoto_wrapper)
wilson_process.start()
wong_process.start()
jansen_process.start()
larter_process.start()
kuramoto_process.start()
wilson_process.join()
wong_process.join()
jansen_process.join()
larter_process.join()
kuramoto_process.join()
没有任何反应,有或没有
if __name__ == '__main__'
(单元仅在 0.3 秒内运行,并且没有 print()
语句打印)。我尝试以不同的方式定义它,在那里我创建一个函数和所有将被调用的optimizer
对象的列表:
def main_wrapper(optimizer, n_iter_BO, init_points_BO, acquisition_function):
print(optimizer)
optimizer.maximize(
n_iter=n_iter_BO,
init_points=init_points_BO,
acquisition_function=acquisition_function
)
optimizers_list = [wilson_optimizer, wong_optimizer, jansen_optimizer, larter_optimizer, kuramoto_optimizer]
然后用:
from multiprocess import Process
max_pool = 5
with Pool(max_pool) as p:
pool_outputs = list(
tqdm(
p.imap(partial(main_wrapper, n_iter_BO, init_points_BO, acquisition_function),
optimizers_list),
total=len(optimizers_list)
)
)
# Getting the results of the 5 repetitions from the process outputs
multiprocessing_outputs = list(zip(*pool_outputs))
multiprocessing_outputs = list(multiprocessing_outputs[1])
print(multiprocessing_outputs)
这也行不通。有没有办法在 Jupyter Notebook 中运行 5 个独立的函数?非常感谢您的帮助!