()
| 46 | self.downloader.download(self.stocks) |
| 47 | |
| 48 | def main(): |
| 49 | args = parse_args() |
| 50 | |
| 51 | cfg = Config.fromfile(args.config) |
| 52 | |
| 53 | if args.cfg_options is None: |
| 54 | args.cfg_options = dict() |
| 55 | if args.root is not None: |
| 56 | args.cfg_options["root"] = args.root |
| 57 | if args.workdir is not None: |
| 58 | args.cfg_options["workdir"] = args.workdir |
| 59 | if args.tag is not None: |
| 60 | args.cfg_options["tag"] = args.tag |
| 61 | if args.batch_size is not None: |
| 62 | args.cfg_options["batch_size"] = args.batch_size |
| 63 | cfg.merge_from_dict(args.cfg_options) |
| 64 | |
| 65 | update_data_root(cfg, root=args.root) |
| 66 | |
| 67 | exp_path = os.path.join(cfg.root, cfg.workdir, cfg.tag) |
| 68 | if args.if_remove is None: |
| 69 | args.if_remove = bool(input(f"| Arguments PRESS 'y' to REMOVE: {exp_path}? ") == 'y') |
| 70 | if args.if_remove: |
| 71 | import shutil |
| 72 | shutil.rmtree(exp_path, ignore_errors=True) |
| 73 | print(f"| Arguments Remove work_dir: {exp_path}") |
| 74 | else: |
| 75 | print(f"| Arguments Keep work_dir: {exp_path}") |
| 76 | os.makedirs(exp_path, exist_ok=True) |
| 77 | |
| 78 | downloader = DOWNLOADER.build(cfg.downloader) |
| 79 | |
| 80 | print(f"| Check Downloading {cfg.tag}...") |
| 81 | stocks = downloader.check_download() |
| 82 | print(f"| Check Downloading {cfg.tag} Done! Failed: {len(stocks)} / {len(downloader.stocks)}") |
| 83 | |
| 84 | batch_size = cfg.batch_size if cfg.batch_size < len(stocks) else 5 |
| 85 | batch_size = min(len(stocks), batch_size) |
| 86 | |
| 87 | processes = [] |
| 88 | remaining_stocks = downloader.check_download() |
| 89 | |
| 90 | while remaining_stocks: |
| 91 | batch = remaining_stocks[:batch_size] |
| 92 | remaining_stocks = remaining_stocks[batch_size:] |
| 93 | |
| 94 | process = StockDownloaderProcess(batch, downloader) |
| 95 | processes.append(process) |
| 96 | process.start() |
| 97 | |
| 98 | for process in processes: |
| 99 | process.join() |
| 100 | |
| 101 | if __name__ == '__main__': |
| 102 | main() |
no test coverage detected