dpdispatcher 0.5.7__tar.gz → 0.5.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of dpdispatcher might be problematic. Click here for more details.
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/PKG-INFO +1 -1
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/batch.md +8 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/__init__.py +2 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/_version.py +2 -2
- dpdispatcher-0.5.8/dpdispatcher/fugaku.py +94 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/submission.py +67 -3
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/PKG-INFO +1 -1
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/SOURCES.txt +3 -0
- dpdispatcher-0.5.8/tests/jsons/machine_fugaku.json +24 -0
- dpdispatcher-0.5.8/tests/jsons/machine_local_fugaku.json +18 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_run_submission.py +63 -1
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/ci-docker.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/machines.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/mirror_gitee.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/publish_conda.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/pyright.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/release.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/test.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.gitignore +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.pre-commit-config.yaml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/CONTRIBUTING.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/Dockerfile +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/LICENSE +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/README.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/LICENSE +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/README.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/pbs/docker-compose.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/pbs/start-pbs.sh +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/pbs.sh +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/slurm/docker-compose.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/slurm/register_cluster.sh +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/slurm/start-slurm.sh +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/slurm.sh +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/ssh/docker-compose.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/ssh/start-ssh.sh +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/ssh.sh +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/ssh_rsync.sh +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/codecov.yml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/conda/conda_build_config.yaml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/conda/meta.yaml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/.gitignore +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/Makefile +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/conf.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/context.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/credits.rst +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/dpdispatcher_on_yarn.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/examples/expanse.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/examples/g16.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/examples/shell.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/getting-started.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/index.rst +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/install.md +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/machine.rst +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/make.bat +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/requirements.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/resources.rst +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/task.rst +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/JobStatus.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/arginfo.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/base_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/distributed_shell.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dp_cloud_server.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dp_cloud_server_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/__init__.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/client.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/config.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/retcode.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/temp_test.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/zip_file.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpdisp.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/hdfs_cli.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/hdfs_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/lazy_local_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/local_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/lsf.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/machine.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/pbs.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/shell.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/slurm.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/ssh_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/utils.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/dependency_links.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/entry_points.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/requires.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/top_level.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/machine/expanse.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/machine/lazy_local.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/machine/mandu.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/resources/expanse_cpu.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/resources/mandu.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/task/deepmd-kit.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/task/g16.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/pyproject.toml +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/scripts/script_gen_dargs_docs.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/scripts/script_gen_dargs_json.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/setup.cfg +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/.gitignore +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/__init__.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/batch.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/debug_test_class_submission_init.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_ali_ehpc.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_dp_cloud_server.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_lazy_ali_ehpc.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_lsf.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_shell.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_slurm.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_ssh_ali_ehpc.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/graph.pb +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/job.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_ali_ehpc.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_center.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_diffenert.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_dp_cloud_server.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_if_cuda_multi_devices.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_lazy_local_lsf.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_lazy_local_slurm.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_lazylocal_shell.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_local_shell.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_lsf.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_slurm.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_yarn.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/resources.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/submission.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/task.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/lsf/context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/lsf/test_dispatcher.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/lsf/test_lsf_local.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_dispatcher_utils.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_lazy_local_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_local_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_local_session.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_ssh_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/pbs/context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/pbs/test_dispatcher.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/pbs/test_pbs_local.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/sample_class.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/script_gen_json.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/shell/context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/shell/test_dispatcher.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/shell/test_shell_local.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/shell/test_shell_ssh.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_dispatcher.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_dispatcher_lazy_local.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_slurm_lazy_local.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_slurm_local.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_slurm_ssh.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm_test.env +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_argcheck.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_job.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_machine.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_machine_dispatch.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_resources.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_submission.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_submission_init.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_task.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-1/some_dir/some_file +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/dir with space/file with space +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/some_dir/some_file +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_group_size.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_if_cuda_multi_devices/test_dir/test.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_import_classes.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lazy_local_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_local_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/submission.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_script_generation.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_retry.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_run_submission_ratio_unfinished.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_cuda_multi_devices.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/fail_dir/mock_fail_task.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir with space/example.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir1/example.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir2/example.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir3/example.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir4/example.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/graph.pb +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/recover_dir/mock_recover_task.txt +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/d3c842c5b9476e48f7145b370cd330372b9293e1.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/submission.json +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_script_generation.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_ssh_context.py +0 -0
- {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_work_path/.gitkeep +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dpdispatcher
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.8
|
|
4
4
|
Summary: Generate HPC scheduler systems jobs input scripts, submit these scripts to HPC systems, and poke until they finish
|
|
5
5
|
Author: DeepModeling
|
|
6
6
|
License: GNU LESSER GENERAL PUBLIC LICENSE
|
|
@@ -62,3 +62,11 @@ Read Bohrium documentation for details.
|
|
|
62
62
|
|
|
63
63
|
`DistributedShell` is used to submit yarn jobs.
|
|
64
64
|
Read [Support DPDispatcher on Yarn](dpdispatcher_on_yarn.md) for details.
|
|
65
|
+
|
|
66
|
+
## Fugaku
|
|
67
|
+
|
|
68
|
+
{dargs:argument}`batch_type <resources/batch_type>`: `Fugaku`
|
|
69
|
+
|
|
70
|
+
[Fujitsu cloud service](https://doc.cloud.global.fujitsu.com/lib/common/jp/hpc-user-manual/) is a job scheduling system used by Fujitsu's HPCs such as Fugaku, ITO and K computer. It should be noted that although the same job scheduling system is used, there are some differences in the details, Fagaku class cannot be directly used for other HPCs.
|
|
71
|
+
|
|
72
|
+
Read Fujitsu cloud service documentation for details.
|
|
@@ -43,6 +43,7 @@ except ImportError:
|
|
|
43
43
|
from .distributed_shell import DistributedShell
|
|
44
44
|
from .dp_cloud_server import DpCloudServer, Lebesgue
|
|
45
45
|
from .dp_cloud_server_context import DpCloudServerContext, LebesgueContext
|
|
46
|
+
from .fugaku import Fugaku
|
|
46
47
|
from .hdfs_context import HDFSContext
|
|
47
48
|
from .lazy_local_context import LazyLocalContext
|
|
48
49
|
from .local_context import LocalContext
|
|
@@ -85,6 +86,7 @@ __all__ = [
|
|
|
85
86
|
"PBS",
|
|
86
87
|
"Shell",
|
|
87
88
|
"Slurm",
|
|
89
|
+
"Fugaku",
|
|
88
90
|
"SSHContext",
|
|
89
91
|
"Submission",
|
|
90
92
|
"Task",
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import shlex
|
|
2
|
+
|
|
3
|
+
from dpdispatcher import dlog
|
|
4
|
+
from dpdispatcher.JobStatus import JobStatus
|
|
5
|
+
from dpdispatcher.machine import Machine
|
|
6
|
+
|
|
7
|
+
fugaku_script_header_template = """\
|
|
8
|
+
{queue_name_line}
|
|
9
|
+
{fugaku_node_number_line}
|
|
10
|
+
{fugaku_ntasks_per_node_line}
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Fugaku(Machine):
|
|
15
|
+
def gen_script(self, job):
|
|
16
|
+
fugaku_script = super().gen_script(job)
|
|
17
|
+
return fugaku_script
|
|
18
|
+
|
|
19
|
+
def gen_script_header(self, job):
|
|
20
|
+
resources = job.resources
|
|
21
|
+
fugaku_script_header_dict = {}
|
|
22
|
+
fugaku_script_header_dict[
|
|
23
|
+
"fugaku_node_number_line"
|
|
24
|
+
] = f'#PJM -L "node={resources.number_node}" '
|
|
25
|
+
fugaku_script_header_dict[
|
|
26
|
+
"fugaku_ntasks_per_node_line"
|
|
27
|
+
] = '#PJM --mpi "max-proc-per-node={cpu_per_node}"'.format(
|
|
28
|
+
cpu_per_node=resources.cpu_per_node
|
|
29
|
+
)
|
|
30
|
+
fugaku_script_header_dict[
|
|
31
|
+
"queue_name_line"
|
|
32
|
+
] = f'#PJM -L "rscgrp={resources.queue_name}"'
|
|
33
|
+
fugaku_script_header = fugaku_script_header_template.format(
|
|
34
|
+
**fugaku_script_header_dict
|
|
35
|
+
)
|
|
36
|
+
return fugaku_script_header
|
|
37
|
+
|
|
38
|
+
def do_submit(self, job):
|
|
39
|
+
script_file_name = job.script_file_name
|
|
40
|
+
script_str = self.gen_script(job)
|
|
41
|
+
job_id_name = job.job_hash + "_job_id"
|
|
42
|
+
# script_str = self.sub_script(job_dirs, cmd, args=args, resources=resources, outlog=outlog, errlog=errlog)
|
|
43
|
+
self.context.write_file(fname=script_file_name, write_str=script_str)
|
|
44
|
+
# self.context.write_file(fname=os.path.join(self.context.submission.work_base, script_file_name), write_str=script_str)
|
|
45
|
+
# script_file_dir = os.path.join(self.context.submission.work_base)
|
|
46
|
+
script_file_dir = self.context.remote_root
|
|
47
|
+
# stdin, stdout, stderr = self.context.block_checkcall('cd %s && %s %s' % (self.context.remote_root, 'pjsub', script_file_name))
|
|
48
|
+
|
|
49
|
+
stdin, stdout, stderr = self.context.block_checkcall(
|
|
50
|
+
"cd {} && {} {}".format(
|
|
51
|
+
shlex.quote(script_file_dir), "pjsub", shlex.quote(script_file_name)
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
subret = stdout.readlines()
|
|
55
|
+
job_id = subret[0].split()[5]
|
|
56
|
+
self.context.write_file(job_id_name, job_id)
|
|
57
|
+
return job_id
|
|
58
|
+
|
|
59
|
+
def default_resources(self, resources):
|
|
60
|
+
pass
|
|
61
|
+
|
|
62
|
+
def check_status(self, job):
|
|
63
|
+
job_id = job.job_id
|
|
64
|
+
if job_id == "":
|
|
65
|
+
return JobStatus.unsubmitted
|
|
66
|
+
ret, stdin, stdout, stderr = self.context.block_call("pjstat " + job_id)
|
|
67
|
+
err_str = stderr.read().decode("utf-8")
|
|
68
|
+
try:
|
|
69
|
+
status_line = stdout.read().decode("utf-8").split("\n")[-2]
|
|
70
|
+
# pjstat only retrun 0 if the job is not waiting or running
|
|
71
|
+
except Exception:
|
|
72
|
+
ret, stdin, stdout, stderr = self.context.block_call("pjstat -H " + job_id)
|
|
73
|
+
status_line = stdout.read().decode("utf-8").split("\n")[-2]
|
|
74
|
+
status_word = status_line.split()[3]
|
|
75
|
+
if status_word in ["EXT", "CCL", "ERR"]:
|
|
76
|
+
if self.check_finish_tag(job):
|
|
77
|
+
dlog.info(f"job: {job.job_hash} {job.job_id} finished")
|
|
78
|
+
return JobStatus.finished
|
|
79
|
+
else:
|
|
80
|
+
return JobStatus.terminated
|
|
81
|
+
else:
|
|
82
|
+
return JobStatus.unknown
|
|
83
|
+
status_word = status_line.split()[3]
|
|
84
|
+
# dlog.info (status_word)
|
|
85
|
+
if status_word in ["QUE", "HLD", "RNA", "SPD"]:
|
|
86
|
+
return JobStatus.waiting
|
|
87
|
+
elif status_word in ["RUN", "RNE"]:
|
|
88
|
+
return JobStatus.running
|
|
89
|
+
else:
|
|
90
|
+
return JobStatus.unknown
|
|
91
|
+
|
|
92
|
+
def check_finish_tag(self, job):
|
|
93
|
+
job_tag_finished = job.job_hash + "_job_tag_finished"
|
|
94
|
+
return self.context.check_file_exists(job_tag_finished)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# %%
|
|
2
|
+
import asyncio
|
|
2
3
|
import copy
|
|
4
|
+
import functools
|
|
3
5
|
import json
|
|
4
6
|
import os
|
|
5
7
|
import pathlib
|
|
@@ -199,7 +201,9 @@ class Submission:
|
|
|
199
201
|
self.local_root = machine.context.temp_local_root
|
|
200
202
|
return self
|
|
201
203
|
|
|
202
|
-
def run_submission(
|
|
204
|
+
def run_submission(
|
|
205
|
+
self, *, dry_run=False, exit_on_submit=False, clean=True, check_interval=30
|
|
206
|
+
):
|
|
203
207
|
"""Main method to execute the submission.
|
|
204
208
|
First, check whether old Submission exists on the remote machine, and try to recover from it.
|
|
205
209
|
Second, upload the local files to the remote machine where the tasks to be executed.
|
|
@@ -240,7 +244,7 @@ class Submission:
|
|
|
240
244
|
break
|
|
241
245
|
|
|
242
246
|
try:
|
|
243
|
-
time.sleep(
|
|
247
|
+
time.sleep(check_interval)
|
|
244
248
|
except (Exception, KeyboardInterrupt, SystemExit) as e:
|
|
245
249
|
self.submission_to_json()
|
|
246
250
|
dlog.exception(e)
|
|
@@ -254,12 +258,72 @@ class Submission:
|
|
|
254
258
|
finally:
|
|
255
259
|
pass
|
|
256
260
|
self.handle_unexpected_submission_state()
|
|
257
|
-
self.
|
|
261
|
+
self.try_download_result()
|
|
258
262
|
self.submission_to_json()
|
|
259
263
|
if clean:
|
|
260
264
|
self.clean_jobs()
|
|
261
265
|
return self.serialize()
|
|
262
266
|
|
|
267
|
+
def try_download_result(self):
|
|
268
|
+
start_time = time.time()
|
|
269
|
+
retry_interval = 60 # 每1分钟重试一次
|
|
270
|
+
success = False
|
|
271
|
+
while not success:
|
|
272
|
+
try:
|
|
273
|
+
self.download_jobs()
|
|
274
|
+
success = True
|
|
275
|
+
except (EOFError, Exception) as e:
|
|
276
|
+
dlog.exception(e)
|
|
277
|
+
elapsed_time = time.time() - start_time
|
|
278
|
+
if elapsed_time < 3600: # 1小时内
|
|
279
|
+
dlog.info("Retrying in 1 minute...")
|
|
280
|
+
time.sleep(retry_interval)
|
|
281
|
+
elif elapsed_time < 86400: # 1小时后,但在24小时内
|
|
282
|
+
retry_interval = 600 # 每10分钟重试一次
|
|
283
|
+
dlog.info("Retrying in 10 minutes...")
|
|
284
|
+
time.sleep(retry_interval)
|
|
285
|
+
else: # 超过24小时
|
|
286
|
+
dlog.info("Maximum retries time reached. Exiting.")
|
|
287
|
+
break
|
|
288
|
+
|
|
289
|
+
async def async_run_submission(self, **kwargs):
|
|
290
|
+
"""Async interface of run_submission.
|
|
291
|
+
|
|
292
|
+
Examples
|
|
293
|
+
--------
|
|
294
|
+
>>> import asyncio
|
|
295
|
+
>>> from dpdispacher import Machine, Resource, Submission
|
|
296
|
+
>>> async def run_jobs():
|
|
297
|
+
... backgroud_task = set()
|
|
298
|
+
... # task1
|
|
299
|
+
... task1 = Task(...)
|
|
300
|
+
... submission1 = Submission(..., task_list=[task1])
|
|
301
|
+
... background_task = asyncio.create_task(
|
|
302
|
+
... submission1.async_run_submission(check_interval=2, clean=False)
|
|
303
|
+
... )
|
|
304
|
+
... # task2
|
|
305
|
+
... task2 = Task(...)
|
|
306
|
+
... submission2 = Submission(..., task_list=[task1])
|
|
307
|
+
... background_task = asyncio.create_task(
|
|
308
|
+
... submission2.async_run_submission(check_interval=2, clean=False)
|
|
309
|
+
... )
|
|
310
|
+
... background_tasks.add(background_task)
|
|
311
|
+
... result = await asyncio.gather(*background_tasks)
|
|
312
|
+
... return result
|
|
313
|
+
>>> run_jobs()
|
|
314
|
+
|
|
315
|
+
May raise Error if pass `clean=True` explicitly when submit to pbs or slurm.
|
|
316
|
+
"""
|
|
317
|
+
kwargs = {**{"clean": False}, **kwargs}
|
|
318
|
+
if kwargs["clean"]:
|
|
319
|
+
dlog.warning(
|
|
320
|
+
"Using async submission with `clean=True`, "
|
|
321
|
+
"job may fail in queue system"
|
|
322
|
+
)
|
|
323
|
+
loop = asyncio.get_event_loop()
|
|
324
|
+
wrapped_submission = functools.partial(self.run_submission, **kwargs)
|
|
325
|
+
return await loop.run_in_executor(None, wrapped_submission)
|
|
326
|
+
|
|
263
327
|
def update_submission_state(self):
|
|
264
328
|
"""Check whether all the jobs in the submission.
|
|
265
329
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dpdispatcher
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.8
|
|
4
4
|
Summary: Generate HPC scheduler systems jobs input scripts, submit these scripts to HPC systems, and poke until they finish
|
|
5
5
|
Author: DeepModeling
|
|
6
6
|
License: GNU LESSER GENERAL PUBLIC LICENSE
|
|
@@ -55,6 +55,7 @@ dpdispatcher/distributed_shell.py
|
|
|
55
55
|
dpdispatcher/dp_cloud_server.py
|
|
56
56
|
dpdispatcher/dp_cloud_server_context.py
|
|
57
57
|
dpdispatcher/dpdisp.py
|
|
58
|
+
dpdispatcher/fugaku.py
|
|
58
59
|
dpdispatcher/hdfs_cli.py
|
|
59
60
|
dpdispatcher/hdfs_context.py
|
|
60
61
|
dpdispatcher/lazy_local_context.py
|
|
@@ -131,10 +132,12 @@ tests/jsons/machine_ali_ehpc.json
|
|
|
131
132
|
tests/jsons/machine_center.json
|
|
132
133
|
tests/jsons/machine_diffenert.json
|
|
133
134
|
tests/jsons/machine_dp_cloud_server.json
|
|
135
|
+
tests/jsons/machine_fugaku.json
|
|
134
136
|
tests/jsons/machine_if_cuda_multi_devices.json
|
|
135
137
|
tests/jsons/machine_lazy_local_lsf.json
|
|
136
138
|
tests/jsons/machine_lazy_local_slurm.json
|
|
137
139
|
tests/jsons/machine_lazylocal_shell.json
|
|
140
|
+
tests/jsons/machine_local_fugaku.json
|
|
138
141
|
tests/jsons/machine_local_shell.json
|
|
139
142
|
tests/jsons/machine_lsf.json
|
|
140
143
|
tests/jsons/machine_slurm.json
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"machine": {
|
|
3
|
+
"batch_type": "fugaku",
|
|
4
|
+
"context_type": "SSHContext",
|
|
5
|
+
"local_root" : "./",
|
|
6
|
+
"remote_profile": {
|
|
7
|
+
"hostname": "login.****.jp",
|
|
8
|
+
"key_filename":"/home/***/.ssh/***",
|
|
9
|
+
"passphrase":"******",
|
|
10
|
+
"username": "u*****"
|
|
11
|
+
},
|
|
12
|
+
"remote_root": "/vol*****/data/****"
|
|
13
|
+
},
|
|
14
|
+
"resources": {
|
|
15
|
+
"number_node": 1,
|
|
16
|
+
"cpu_per_node": 48,
|
|
17
|
+
"source_list": [""],
|
|
18
|
+
"queue_name": "small",
|
|
19
|
+
"group_size": 1,
|
|
20
|
+
"custom_flags" : ["#PJM -L \"elapse=4:00:00\"",
|
|
21
|
+
"#PJM -x PJM_LLIO_GFSCACHE=/vol0004",
|
|
22
|
+
"#PJM -g hp******"]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"machine": {
|
|
3
|
+
"batch_type": "fugaku",
|
|
4
|
+
"context_type": "local",
|
|
5
|
+
"local_root" : "./",
|
|
6
|
+
"remote_root": "./"
|
|
7
|
+
},
|
|
8
|
+
"resources": {
|
|
9
|
+
"number_node": 1,
|
|
10
|
+
"cpu_per_node": 48,
|
|
11
|
+
"source_list": [""],
|
|
12
|
+
"queue_name": "small",
|
|
13
|
+
"group_size": 1,
|
|
14
|
+
"custom_flags" : ["#PJM -L \"elapse=4:00:00\"",
|
|
15
|
+
"#PJM -x PJM_LLIO_GFSCACHE=/vol0004",
|
|
16
|
+
"#PJM -g hp******"]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import os
|
|
3
|
+
import random
|
|
2
4
|
import shutil
|
|
3
5
|
import sys
|
|
4
6
|
|
|
@@ -85,7 +87,51 @@ class RunSubmission:
|
|
|
85
87
|
backward_common_files=[],
|
|
86
88
|
task_list=task_list,
|
|
87
89
|
)
|
|
88
|
-
submission.run_submission()
|
|
90
|
+
submission.run_submission(check_interval=2)
|
|
91
|
+
|
|
92
|
+
for ii in range(4):
|
|
93
|
+
self.assertTrue(
|
|
94
|
+
os.path.isfile(
|
|
95
|
+
os.path.join(
|
|
96
|
+
self.machine_dict["local_root"], "test_dir/", f"out{ii}.txt"
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
def test_async_run_submission(self):
|
|
102
|
+
machine = Machine.load_from_dict(self.machine_dict)
|
|
103
|
+
resources = Resources.load_from_dict(self.resources_dict)
|
|
104
|
+
ntask = 4
|
|
105
|
+
|
|
106
|
+
async def run_jobs(ntask):
|
|
107
|
+
background_tasks = set()
|
|
108
|
+
for ii in range(ntask):
|
|
109
|
+
sleep_time = random.random() * 5 + 2
|
|
110
|
+
task = Task(
|
|
111
|
+
command=f"echo dpdispatcher_unittest_{ii} && sleep {sleep_time}",
|
|
112
|
+
task_work_path="./",
|
|
113
|
+
forward_files=[],
|
|
114
|
+
backward_files=[f"out{ii}.txt"],
|
|
115
|
+
outlog=f"out{ii}.txt",
|
|
116
|
+
)
|
|
117
|
+
submission = Submission(
|
|
118
|
+
work_base="test_dir/",
|
|
119
|
+
machine=machine,
|
|
120
|
+
resources=resources,
|
|
121
|
+
forward_common_files=[],
|
|
122
|
+
backward_common_files=[],
|
|
123
|
+
task_list=[task],
|
|
124
|
+
)
|
|
125
|
+
background_task = asyncio.create_task(
|
|
126
|
+
submission.async_run_submission(check_interval=2, clean=False)
|
|
127
|
+
)
|
|
128
|
+
background_tasks.add(background_task)
|
|
129
|
+
# background_task.add_done_callback(background_tasks.discard)
|
|
130
|
+
res = await asyncio.gather(*background_tasks)
|
|
131
|
+
return res
|
|
132
|
+
|
|
133
|
+
res = asyncio.run(run_jobs(ntask=ntask))
|
|
134
|
+
print(res)
|
|
89
135
|
|
|
90
136
|
for ii in range(4):
|
|
91
137
|
self.assertTrue(
|
|
@@ -110,6 +156,10 @@ class TestSlurmRun(RunSubmission, unittest.TestCase):
|
|
|
110
156
|
self.machine_dict["batch_type"] = "Slurm"
|
|
111
157
|
self.resources_dict["queue_name"] = "normal"
|
|
112
158
|
|
|
159
|
+
@unittest.skip("Manaually skip") # comment this line to open unittest
|
|
160
|
+
def test_async_run_submission(self):
|
|
161
|
+
return super().test_async_run_submission()
|
|
162
|
+
|
|
113
163
|
|
|
114
164
|
@unittest.skipIf(
|
|
115
165
|
os.environ.get("DPDISPATCHER_TEST") != "slurm",
|
|
@@ -121,6 +171,10 @@ class TestSlurmJobArrayRun(RunSubmission, unittest.TestCase):
|
|
|
121
171
|
self.machine_dict["batch_type"] = "SlurmJobArray"
|
|
122
172
|
self.resources_dict["queue_name"] = "normal"
|
|
123
173
|
|
|
174
|
+
@unittest.skip("Manaually skip") # comment this line to open unittest
|
|
175
|
+
def test_async_run_submission(self):
|
|
176
|
+
return super().test_async_run_submission()
|
|
177
|
+
|
|
124
178
|
|
|
125
179
|
@unittest.skipIf(
|
|
126
180
|
os.environ.get("DPDISPATCHER_TEST") != "slurm",
|
|
@@ -133,6 +187,10 @@ class TestSlurmJobArrayRun2(RunSubmission, unittest.TestCase):
|
|
|
133
187
|
self.resources_dict["queue_name"] = "normal"
|
|
134
188
|
self.resources_dict["kwargs"] = {"slurm_job_size": 2}
|
|
135
189
|
|
|
190
|
+
@unittest.skip("Manaually skip") # comment this line to open unittest
|
|
191
|
+
def test_async_run_submission(self):
|
|
192
|
+
return super().test_async_run_submission()
|
|
193
|
+
|
|
136
194
|
|
|
137
195
|
@unittest.skipIf(
|
|
138
196
|
os.environ.get("DPDISPATCHER_TEST") != "pbs", "outside the pbs testing environment"
|
|
@@ -143,6 +201,10 @@ class TestPBSRun(RunSubmission, unittest.TestCase):
|
|
|
143
201
|
self.machine_dict["batch_type"] = "PBS"
|
|
144
202
|
self.resources_dict["queue_name"] = "workq"
|
|
145
203
|
|
|
204
|
+
@unittest.skip("Manaually skip") # comment this line to open unittest
|
|
205
|
+
def test_async_run_submission(self):
|
|
206
|
+
return super().test_async_run_submission()
|
|
207
|
+
|
|
146
208
|
|
|
147
209
|
@unittest.skipIf(sys.platform == "win32", "Shell is not supported on Windows")
|
|
148
210
|
class TestLazyLocalContext(RunSubmission, unittest.TestCase):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|