experimaestro 1.8.9__tar.gz → 1.9.1__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 experimaestro might be problematic. Click here for more details.

Files changed (156) hide show
  1. {experimaestro-1.8.9 → experimaestro-1.9.1}/PKG-INFO +1 -1
  2. {experimaestro-1.8.9 → experimaestro-1.9.1}/pyproject.toml +2 -2
  3. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/cli/filter.py +10 -1
  4. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/cli/jobs.py +12 -5
  5. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/connectors/__init__.py +5 -2
  6. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/connectors/local.py +2 -2
  7. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launchers/slurm/base.py +4 -4
  8. {experimaestro-1.8.9 → experimaestro-1.9.1}/LICENSE +0 -0
  9. {experimaestro-1.8.9 → experimaestro-1.9.1}/README.md +0 -0
  10. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/__init__.py +0 -0
  11. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/__main__.py +0 -0
  12. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/annotations.py +0 -0
  13. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/checkers.py +0 -0
  14. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/cli/__init__.py +0 -0
  15. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/click.py +0 -0
  16. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/commandline.py +0 -0
  17. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/compat.py +0 -0
  18. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/connectors/ssh.py +0 -0
  19. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/__init__.py +0 -0
  20. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/arguments.py +0 -0
  21. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/callbacks.py +0 -0
  22. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/context.py +0 -0
  23. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/identifier.py +0 -0
  24. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/objects/__init__.py +0 -0
  25. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/objects/config.py +0 -0
  26. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/objects/config_utils.py +0 -0
  27. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/objects/config_walk.py +0 -0
  28. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/objects.pyi +0 -0
  29. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/serialization.py +0 -0
  30. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/serializers.py +0 -0
  31. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/types.py +0 -0
  32. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/core/utils.py +0 -0
  33. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/exceptions.py +0 -0
  34. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/experiments/__init__.py +0 -0
  35. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/experiments/cli.py +0 -0
  36. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/experiments/configuration.py +0 -0
  37. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/generators.py +0 -0
  38. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/huggingface.py +0 -0
  39. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/ipc.py +0 -0
  40. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launcherfinder/__init__.py +0 -0
  41. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launcherfinder/base.py +0 -0
  42. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launcherfinder/parser.py +0 -0
  43. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launcherfinder/registry.py +0 -0
  44. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launcherfinder/specs.py +0 -0
  45. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launchers/__init__.py +0 -0
  46. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launchers/direct.py +0 -0
  47. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launchers/oar.py +0 -0
  48. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/launchers/slurm/__init__.py +0 -0
  49. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/locking.py +0 -0
  50. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/mkdocs/__init__.py +0 -0
  51. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/mkdocs/annotations.py +0 -0
  52. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/mkdocs/base.py +0 -0
  53. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/mkdocs/metaloader.py +0 -0
  54. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/mkdocs/style.css +0 -0
  55. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/mypy.py +0 -0
  56. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/notifications.py +0 -0
  57. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/py.typed +0 -0
  58. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/rpyc.py +0 -0
  59. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/run.py +0 -0
  60. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/scheduler/__init__.py +0 -0
  61. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/scheduler/base.py +0 -0
  62. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/scheduler/dependencies.py +0 -0
  63. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/scheduler/dynamic_outputs.py +0 -0
  64. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/scheduler/services.py +0 -0
  65. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/scheduler/state.py +0 -0
  66. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/scheduler/workspace.py +0 -0
  67. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/scriptbuilder.py +0 -0
  68. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/__init__.py +0 -0
  69. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/0c35d18bf06992036b69.woff2 +0 -0
  70. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/1815e00441357e01619e.ttf +0 -0
  71. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/219aa9140e099e6c72ed.woff2 +0 -0
  72. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/2463b90d9a316e4e5294.woff2 +0 -0
  73. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/2582b0e4bcf85eceead0.ttf +0 -0
  74. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/3a4004a46a653d4b2166.woff +0 -0
  75. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/3baa5b8f3469222b822d.woff +0 -0
  76. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/4d73cb90e394b34b7670.woff +0 -0
  77. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/4ef4218c522f1eb6b5b1.woff2 +0 -0
  78. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/5d681e2edae8c60630db.woff +0 -0
  79. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/6f420cf17cc0d7676fad.woff2 +0 -0
  80. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/89999bdf5d835c012025.woff2 +0 -0
  81. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/914997e1bdfc990d0897.ttf +0 -0
  82. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/c210719e60948b211a12.woff2 +0 -0
  83. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/c380809fd3677d7d6903.woff2 +0 -0
  84. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/f882956fd323fd322f31.woff +0 -0
  85. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/favicon.ico +0 -0
  86. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/index.css +0 -0
  87. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/index.css.map +0 -0
  88. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/index.html +0 -0
  89. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/index.js +0 -0
  90. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/index.js.map +0 -0
  91. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/login.html +0 -0
  92. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/server/data/manifest.json +0 -0
  93. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/settings.py +0 -0
  94. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/sphinx/__init__.py +0 -0
  95. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/sphinx/static/experimaestro.css +0 -0
  96. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/taskglobals.py +0 -0
  97. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/__init__.py +0 -0
  98. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/conftest.py +0 -0
  99. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/connectors/bin/executable.py +0 -0
  100. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/connectors/test_local.py +0 -0
  101. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/connectors/utils.py +0 -0
  102. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/core/__init__.py +0 -0
  103. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/core/test_generics.py +0 -0
  104. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/definitions_types.py +0 -0
  105. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/__init__.py +0 -0
  106. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/bin/sacct +0 -0
  107. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/bin/sbatch +0 -0
  108. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/bin/srun +0 -0
  109. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/bin/test.py +0 -0
  110. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/common.py +0 -0
  111. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/config_slurm/__init__.py +0 -0
  112. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/config_slurm/launchers.py +0 -0
  113. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/test_local.py +0 -0
  114. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/launchers/test_slurm.py +0 -0
  115. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/restart.py +0 -0
  116. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/restart_main.py +0 -0
  117. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/scripts/notifyandwait.py +0 -0
  118. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/scripts/waitforfile.py +0 -0
  119. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/task_tokens.py +0 -0
  120. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/tasks/__init__.py +0 -0
  121. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/tasks/all.py +0 -0
  122. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/tasks/foreign.py +0 -0
  123. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_checkers.py +0 -0
  124. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_dependencies.py +0 -0
  125. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_experiment.py +0 -0
  126. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_findlauncher.py +0 -0
  127. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_forward.py +0 -0
  128. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_identifier.py +0 -0
  129. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_instance.py +0 -0
  130. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_objects.py +0 -0
  131. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_outputs.py +0 -0
  132. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_param.py +0 -0
  133. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_progress.py +0 -0
  134. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_serializers.py +0 -0
  135. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_snippets.py +0 -0
  136. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_ssh.py +0 -0
  137. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_tags.py +0 -0
  138. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_tasks.py +0 -0
  139. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_tokens.py +0 -0
  140. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_types.py +0 -0
  141. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/test_validation.py +0 -0
  142. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/token_reschedule.py +0 -0
  143. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tests/utils.py +0 -0
  144. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tokens.py +0 -0
  145. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tools/__init__.py +0 -0
  146. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tools/diff.py +0 -0
  147. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tools/documentation.py +0 -0
  148. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/tools/jobs.py +0 -0
  149. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/typingutils.py +0 -0
  150. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/utils/__init__.py +0 -0
  151. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/utils/asyncio.py +0 -0
  152. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/utils/jobs.py +0 -0
  153. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/utils/jupyter.py +0 -0
  154. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/utils/resources.py +0 -0
  155. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/utils/settings.py +0 -0
  156. {experimaestro-1.8.9 → experimaestro-1.9.1}/src/experimaestro/xpmutils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: experimaestro
3
- Version: 1.8.9
3
+ Version: 1.9.1
4
4
  Summary: "Experimaestro is a computer science experiment manager"
5
5
  License: GPL-3
6
6
  Keywords: experiment manager
@@ -20,7 +20,7 @@ include = [
20
20
  "src/experimaestro/mkdocs/style.css",
21
21
  { path="src/experimaestro/server/data/*", format=['sdist', 'wheel']}
22
22
  ]
23
- version = "1.8.9"
23
+ version = "1.9.1"
24
24
  repository = "https://github.com/experimaestro/experimaestro-python"
25
25
  documentation = "https://experimaestro-python.readthedocs.io/"
26
26
 
@@ -122,7 +122,7 @@ warn_unused_ignores = true
122
122
 
123
123
  [tool.commitizen]
124
124
  name = "cz_conventional_commits"
125
- version = "1.8.9"
125
+ version = "1.9.1"
126
126
  changelog_start_rev = "v1.0.0"
127
127
  tag_format = "v$major.$minor.$patch$prerelease"
128
128
  # update_changelog_on_bump = true
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  from typing import Any, Callable, Dict, List, Optional
2
3
  import pyparsing as pp
3
4
  from pathlib import Path
@@ -8,9 +9,10 @@ from experimaestro.scheduler import JobState
8
9
 
9
10
 
10
11
  class JobInformation:
11
- def __init__(self, path: Path, scriptname: str):
12
+ def __init__(self, path: Path, scriptname: str, check: bool = False):
12
13
  self.path = path
13
14
  self.scriptname = scriptname
15
+ self.check = check
14
16
 
15
17
  @cached_property
16
18
  def params(self):
@@ -27,6 +29,13 @@ class JobInformation:
27
29
  if (self.path / f"{self.scriptname}.failed").is_file():
28
30
  return JobState.ERROR
29
31
  if (self.path / f"{self.scriptname}.pid").is_file():
32
+ if self.check:
33
+ if process := self.getprocess():
34
+ state = asyncio.run(process.aio_state(0))
35
+ if state is None or state.finished:
36
+ return JobState.ERROR
37
+ else:
38
+ return JobState.ERROR
30
39
  return JobState.RUNNING
31
40
  else:
32
41
  return None
@@ -1,4 +1,5 @@
1
1
  # flake8: noqa: T201
2
+ import asyncio
2
3
  import subprocess
3
4
  from typing import Optional
4
5
  from shutil import rmtree
@@ -49,6 +50,7 @@ def process(
49
50
  filter="",
50
51
  perform=False,
51
52
  fullpath=False,
53
+ check=False,
52
54
  ):
53
55
  from .filter import createFilter, JobInformation
54
56
  from experimaestro.scheduler import JobState
@@ -63,13 +65,14 @@ def process(
63
65
  for job in p.glob("jobs/*/*"):
64
66
  job_path = job.resolve()
65
67
  if job_path.is_dir():
66
- *_, scriptname = job_path.parent.name.rsplit(".", 1)
67
- job2xp.setdefault(scriptname, set()).add(p.name)
68
+ job2xp.setdefault(job_path.name, set()).add(p.name)
68
69
 
69
70
  if (p / "jobs.bak").is_dir():
70
71
  cprint(f" Experiment {p.name} has not finished yet", "red")
71
72
  if (not perform) and (kill or clean):
72
- cprint(" Preventing kill/clean (use --perform if you want to)", "yellow")
73
+ cprint(
74
+ " Preventing kill/clean (use --perform if you want to)", "yellow"
75
+ )
73
76
  kill = False
74
77
  clean = False
75
78
 
@@ -79,11 +82,11 @@ def process(
79
82
  p = job.resolve()
80
83
  if p.is_dir():
81
84
  *_, scriptname = p.parent.name.rsplit(".", 1)
82
- xps = job2xp.get(scriptname, set())
85
+ xps = job2xp.get(job.name, set())
83
86
  if experiment and experiment not in xps:
84
87
  continue
85
88
 
86
- info = JobInformation(p, scriptname)
89
+ info = JobInformation(p, scriptname, check=check)
87
90
  job_str = (
88
91
  (str(job.resolve()) if fullpath else f"{job.parent.name}/{job.name}")
89
92
  + " "
@@ -151,6 +154,7 @@ def process(
151
154
  @click.option("--ready", is_flag=True, help="Include tasks which are not yet scheduled")
152
155
  @click.option("--filter", default="", help="Filter expression")
153
156
  @click.option("--fullpath", is_flag=True, help="Prints full paths")
157
+ @click.option("--no-check", is_flag=True, help="Check that running jobs")
154
158
  @jobs.command()
155
159
  @click.pass_context
156
160
  def list(
@@ -160,6 +164,7 @@ def list(
160
164
  tags: bool,
161
165
  ready: bool,
162
166
  fullpath: bool,
167
+ no_check: bool,
163
168
  ):
164
169
  process(
165
170
  ctx.obj.workspace,
@@ -168,6 +173,7 @@ def list(
168
173
  tags=tags,
169
174
  ready=ready,
170
175
  fullpath=fullpath,
176
+ check=not no_check,
171
177
  )
172
178
 
173
179
 
@@ -187,6 +193,7 @@ def kill(
187
193
  ready: bool,
188
194
  fullpath: bool,
189
195
  perform: bool,
196
+ check: bool,
190
197
  ):
191
198
  process(
192
199
  ctx.obj.workspace,
@@ -114,8 +114,11 @@ class Process:
114
114
  """Wait until the process finishes and returns the error code"""
115
115
  raise NotImplementedError(f"Not implemented: {self.__class__}.wait")
116
116
 
117
- async def aio_state(self) -> ProcessState:
118
- """Returns the job state"""
117
+ async def aio_state(self, timeout: float | None = None) -> ProcessState:
118
+ """Returns the job state
119
+
120
+ :param timeout: maximum waiting time for a refresh
121
+ """
119
122
  raise NotImplementedError(f"Not implemented: {self.__class__}.aio_state")
120
123
 
121
124
  async def aio_isrunning(self):
@@ -39,7 +39,7 @@ class PsutilProcess(Process):
39
39
  )
40
40
  return code
41
41
 
42
- async def aio_state(self):
42
+ async def aio_state(self, timeout: float | None = None) -> ProcessState:
43
43
  if self._process.is_running():
44
44
  return ProcessState.RUNNING
45
45
  return ProcessState.FINISHED
@@ -65,7 +65,7 @@ class LocalProcess(Process):
65
65
  )
66
66
  return code
67
67
 
68
- async def aio_state(self):
68
+ async def aio_state(self, timeout: float | None = None) -> ProcessState:
69
69
  code = self._process.poll()
70
70
  if code is None:
71
71
  return ProcessState.RUNNING
@@ -87,7 +87,7 @@ class SlurmProcessWatcher(threading.Thread):
87
87
  WATCHERS: Dict[Tuple[Tuple[str, Any]], "SlurmProcessWatcher"] = {}
88
88
 
89
89
  def __init__(self, launcher: "SlurmLauncher"):
90
- super().__init__()
90
+ super().__init__(daemon=True)
91
91
  self.launcher = launcher
92
92
  self.count = 1
93
93
  self.jobs: Dict[str, SlurmJobState] = {}
@@ -184,10 +184,10 @@ class BatchSlurmProcess(Process):
184
184
  if state and state.finished():
185
185
  return 0 if state.slurm_state == "COMPLETED" else 1
186
186
 
187
- async def aio_state(self):
187
+ async def aio_state(self, timeout: float | None = None) -> ProcessState:
188
188
  def check():
189
189
  with SlurmProcessWatcher.get(self.launcher) as watcher:
190
- jobinfo = watcher.getjob(self.jobid)
190
+ jobinfo = watcher.getjob(self.jobid, timeout=timeout)
191
191
  return jobinfo.state if jobinfo else ProcessState.SCHEDULED
192
192
 
193
193
  return await asyncThreadcheck("slurm.aio_isrunning", check)
@@ -212,7 +212,7 @@ class BatchSlurmProcess(Process):
212
212
 
213
213
  # Checks that the process is running
214
214
  with SlurmProcessWatcher.get(launcher) as watcher:
215
- logger.info("Checking SLURM job %s", process.jobid)
215
+ logger.debug("Checking SLURM job %s", process.jobid)
216
216
  jobinfo = watcher.getjob(process.jobid, timeout=0.1)
217
217
  if jobinfo and jobinfo.state.running:
218
218
  logger.debug(
File without changes
File without changes