Я использую multiprocessing.Pool
для выполнения ряда задач.
def execute(task):
# run task, return result
def on_completion(task_result):
# process task result
async_results = [pool.apply_async(execute,
args=[task],
callback=on_completion)
for task in self.tasks]
# wait for results
Мой обработчик завершения вызывается из пула хорошим, сериализованным способом, поэтому мне не нужно беспокоиться о потокебезопасность в его реализации.
Однако я также хотел бы получать уведомления при запуске задачи.Есть ли элегантный способ сделать следующее?
def on_start(arg): # Whatever arg(s) were passed to the execute function
# Called when task starts to run
pool.apply_async(run_task,
args=[task],
start_callback=on_start,
completion_callback=on_completion)