Example #1
0
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")
Example #2
0
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"