- 標準出力とファイルのログを書き出す
- 好きなコア数で並列処理する
- デバッグ中はデータ数少なくしたい
みたいなときこんな感じでかいたの使ってる
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')