- Отменить все фьючерсы (как запущенные, так и невыполненные) в случае сбоя задачи.
- Поднять ошибка, которая привела к сбою первой задачи, если эта ошибка молча игнорируется; в противном случае позвольте Python поднять его естественным путем.
Код: Выделить всё
from concurrent.futures import ProcessPoolExecutor, as_completed
from functools import partial
copy_func = partial(copy_from, table_name=table_name, column_string=column_string)
with ProcessPoolExecutor(max_workers=cores_to_use) as executor:
futures = {executor.submit(copy_func, file_path): file_path for file_path in file_path_list}
for f in as_completed(futures):
try:
f.result()
except Exception as e:
executor.shutdown(wait=False) # Attempt to stop the executor
for future in futures:
future.cancel() # Cancel all futures
raise e # Raise the exception
- Правильно ли это обрабатывать отмену задач в ThreadPoolExecutor и ProcessPoolExecutor?
- Есть ли более эффективные подходы для достижения этой функциональности?
- Как я могу гарантировать, что возникающее исключение не будет игнорироваться молча?
- Как я могу гарантировать, что возникшее исключение не будет игнорироваться молча?
- li>
Как освободить все ресурсы, используемые concurrent.futures после исключения?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python