- 標準出力とファイルのログを書き出す
- 好きなコア数で並列処理する
- デバッグ中はデータ数少なくしたい
みたいなときこんな感じでかいたの使ってる
import time import argparse import logging import multiprocessing from pathlib import Path logger = logging.getLogger(__name__) fmt = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s') stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.DEBUG) stream_handler.setFormatter(fmt) logger.setLevel(logging.DEBUG) logger.addHandler(stream_handler) logger.propagate = False def main(args): logger.debug('log test') pass if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--limit', default=None, type=int, help='Max data size') parser.add_argument('--log', default=None, type=str, help='Path to log file.') parser.add_argument('--cpu', default=multiprocessing.cpu_count(), type=int) args = parser.parse_args() if args.log is not None: path = Path(args.log) path.parent.mkdir(parents=True, exist_ok=True) handler = logging.FileHandler(path, 'w') handler.setLevel(logging.DEBUG) logger.addHandler(handler) start = time.time() main(args) t = time.time() - start logger.info(f'Time: {t / 60:,.0f} min {t % 60:,.0f} sec')