33 lines
1.5 KiB
Python
33 lines
1.5 KiB
Python
"""並列処理"""
|
|
|
|
import concurrent.futures
|
|
|
|
from src.batch.bio_sales import create_bio_sales_lot
|
|
from src.batch.laundering import sales_laundering
|
|
from src.error.exceptions import BatchOperationException
|
|
|
|
|
|
def exec():
|
|
# 並列処理を開始
|
|
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
|
|
|
|
# 実績更新
|
|
future_sales_laundering = executor.submit(sales_laundering.exec)
|
|
# 生物由来ロット分解
|
|
future_create_bio_sales_lot = executor.submit(create_bio_sales_lot.exec)
|
|
|
|
# 両方の処理が完了するまで待つ
|
|
concurrent.futures.wait([future_sales_laundering, future_create_bio_sales_lot])
|
|
|
|
# エラーがあれば呼び出し元でキャッチする
|
|
sales_laundering_exc = future_sales_laundering.exception()
|
|
create_bio_sales_lot_exc = future_create_bio_sales_lot.exception()
|
|
|
|
# いずれかにエラーが発生していれば、1つのエラーとして返す。
|
|
if sales_laundering_exc is not None or create_bio_sales_lot_exc is not None:
|
|
sales_laundering_exc_message = str(sales_laundering_exc) if sales_laundering_exc is not None else ''
|
|
create_bio_sales_lot_exc_message = str(create_bio_sales_lot_exc) if create_bio_sales_lot_exc is not None else ''
|
|
raise BatchOperationException(f'並列処理中にエラーが発生しました。実績更新="{sales_laundering_exc_message}", 生物由来ロット分解={create_bio_sales_lot_exc_message}')
|
|
|
|
return
|