def _multiprocess_smiles(args: argparse.Namespace) -> None: def create_cmd(index, filename): cmd_args = [ "aizynthcli", "--smiles", filename, "--config", args.config, "--output", hdf_files[index - 1], ] if args.policy: cmd_args.extend(["--policy", args.policy]) if args.stocks: cmd_args.append("--stocks") cmd_args.extend(args.stocks) if args.cluster: cmd_args.append("--cluster") return cmd_args if not os.path.exists(args.smiles): raise ValueError( "For multiprocessing execution the --smiles argument needs to be a filename" ) setup_logger(logging.INFO) filenames = split_file(args.smiles, args.nproc) hdf_files = [tempfile.mktemp(suffix=".hdf") for _ in range(args.nproc)] start_processes(filenames, "aizynthcli", create_cmd) if not all(os.path.exists(filename) for filename in hdf_files): raise FileNotFoundError( "Not all output files produced. Please check the individual log files: 'aizynthcli*.log'" ) cat_hdf_files(hdf_files, args.output or "output.hdf5")
def test_start_processes(shared_datadir, tmpdir): def create_cmd(index, filename): return [ "python", str(shared_datadir / "dummy.py"), f"{filename}-{index}" ] start_processes(["dummy", "dummy"], str(tmpdir / "log"), create_cmd, 2) for index in [1, 2]: logfile = str(tmpdir / f"log{index}.log") assert os.path.exists(logfile) with open(logfile, "r") as fileobj: lines = fileobj.read() assert lines == f"dummy-{index}\n"
def test_start_processes(tmpdir): script_filename = str(tmpdir / "dummy.py") with open(script_filename, "w") as fileobj: fileobj.write( "import sys\nimport time\nprint(sys.argv[1])\ntime.sleep(2)\n") def create_cmd(index, filename): return ["python", script_filename, f"{filename}-{index}"] start_processes(["dummy", "dummy"], str(tmpdir / "log"), create_cmd, 2) for index in [1, 2]: logfile = str(tmpdir / f"log{index}.log") assert os.path.exists(logfile) with open(logfile, "r") as fileobj: lines = fileobj.read() assert lines == f"dummy-{index}\n"