parsl 2024.6.24__py3-none-any.whl → 2024.7.1__py3-none-any.whl

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.
@@ -1,3 +1,36 @@
1
+ import time
2
+
3
+
4
+ class ManagerLost(Exception):
5
+ """
6
+ Task lost due to manager loss. Manager is considered lost when multiple heartbeats
7
+ have been missed.
8
+ """
9
+ def __init__(self, manager_id: bytes, hostname: str) -> None:
10
+ self.manager_id = manager_id
11
+ self.tstamp = time.time()
12
+ self.hostname = hostname
13
+
14
+ def __str__(self) -> str:
15
+ return (
16
+ f"Task failure due to loss of manager {self.manager_id.decode()} on"
17
+ f" host {self.hostname}"
18
+ )
19
+
20
+
21
+ class VersionMismatch(Exception):
22
+ """Manager and Interchange versions do not match"""
23
+ def __init__(self, interchange_version: str, manager_version: str):
24
+ self.interchange_version = interchange_version
25
+ self.manager_version = manager_version
26
+
27
+ def __str__(self) -> str:
28
+ return (
29
+ f"Manager version info {self.manager_version} does not match interchange"
30
+ f" version info {self.interchange_version}, causing a critical failure"
31
+ )
32
+
33
+
1
34
  class WorkerLost(Exception):
2
35
  """Exception raised when a worker is lost
3
36
  """
@@ -551,6 +551,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
551
551
  logger.debug("Popened interchange process. Writing config object")
552
552
  stdin.write(config_pickle)
553
553
  stdin.flush()
554
+ stdin.close()
554
555
  logger.debug("Sent config object. Requesting worker ports")
555
556
  try:
556
557
  (self.worker_task_port, self.worker_result_port) = self.command_client.run("WORKER_PORTS", timeout_s=120)
@@ -17,6 +17,7 @@ import zmq
17
17
 
18
18
  from parsl import curvezmq
19
19
  from parsl.app.errors import RemoteExceptionWrapper
20
+ from parsl.executors.high_throughput.errors import ManagerLost, VersionMismatch
20
21
  from parsl.executors.high_throughput.manager_record import ManagerRecord
21
22
  from parsl.monitoring.message_type import MessageType
22
23
  from parsl.process_loggers import wrap_with_logs
@@ -31,32 +32,6 @@ LOGGER_NAME = "interchange"
31
32
  logger = logging.getLogger(LOGGER_NAME)
32
33
 
33
34
 
34
- class ManagerLost(Exception):
35
- ''' Task lost due to manager loss. Manager is considered lost when multiple heartbeats
36
- have been missed.
37
- '''
38
- def __init__(self, manager_id: bytes, hostname: str) -> None:
39
- self.manager_id = manager_id
40
- self.tstamp = time.time()
41
- self.hostname = hostname
42
-
43
- def __str__(self) -> str:
44
- return "Task failure due to loss of manager {} on host {}".format(self.manager_id.decode(), self.hostname)
45
-
46
-
47
- class VersionMismatch(Exception):
48
- ''' Manager and Interchange versions do not match
49
- '''
50
- def __init__(self, interchange_version: str, manager_version: str):
51
- self.interchange_version = interchange_version
52
- self.manager_version = manager_version
53
-
54
- def __str__(self) -> str:
55
- return "Manager version info {} does not match interchange version info {}, causing a critical failure".format(
56
- self.manager_version,
57
- self.interchange_version)
58
-
59
-
60
35
  class Interchange:
61
36
  """ Interchange is a task orchestrator for distributed systems.
62
37
 
@@ -1,7 +1,5 @@
1
1
  import os
2
2
 
3
- import pytest
4
-
5
3
  import parsl
6
4
  from parsl.app.app import bash_app
7
5
 
@@ -23,24 +21,18 @@ def no_checkpoint_stdout_app_ignore_args(stdout=None):
23
21
  return "echo X"
24
22
 
25
23
 
26
- def test_memo_stdout():
24
+ def test_memo_stdout(tmpd_cwd):
25
+ path_x = tmpd_cwd / "test.memo.stdout.x"
27
26
 
28
27
  # this should run and create a file named after path_x
29
- path_x = "test.memo.stdout.x"
30
- if os.path.exists(path_x):
31
- os.remove(path_x)
32
-
33
- no_checkpoint_stdout_app_ignore_args(stdout=path_x).result()
34
- assert os.path.exists(path_x)
35
-
36
- # this should be memoized, so not create benc.test.y
37
- path_y = "test.memo.stdout.y"
28
+ no_checkpoint_stdout_app_ignore_args(stdout=str(path_x)).result()
29
+ assert path_x.exists()
38
30
 
39
- if os.path.exists(path_y):
40
- os.remove(path_y)
31
+ # this should be memoized, so should not get created
32
+ path_y = tmpd_cwd / "test.memo.stdout.y"
41
33
 
42
34
  no_checkpoint_stdout_app_ignore_args(stdout=path_y).result()
43
- assert not os.path.exists(path_y)
35
+ assert not path_y.exists(), "For memoization, expected NO file written"
44
36
 
45
37
  # this should also be memoized, so not create an arbitrary name
46
38
  z_fut = no_checkpoint_stdout_app_ignore_args(stdout=parsl.AUTO_LOGNAME)
@@ -1,5 +1,4 @@
1
1
  import copy
2
- import os
3
2
  from typing import List
4
3
 
5
4
  import pytest
@@ -30,21 +29,17 @@ def no_checkpoint_stdout_app(stdout=None):
30
29
  return "echo X"
31
30
 
32
31
 
33
- def test_memo_stdout():
34
-
32
+ def test_memo_stdout(tmpd_cwd):
35
33
  assert const_list_x == const_list_x_arg
36
34
 
37
- path_x = "test.memo.stdout.x"
38
- if os.path.exists(path_x):
39
- os.remove(path_x)
35
+ path_x = tmpd_cwd / "test.memo.stdout.x"
40
36
 
41
37
  # this should run and create a file named after path_x
42
- no_checkpoint_stdout_app(stdout=path_x).result()
43
- assert os.path.exists(path_x)
38
+ no_checkpoint_stdout_app(stdout=str(path_x)).result()
39
+ path_x.unlink(missing_ok=False)
44
40
 
45
- os.remove(path_x)
46
- no_checkpoint_stdout_app(stdout=path_x).result()
47
- assert not os.path.exists(path_x)
41
+ no_checkpoint_stdout_app(stdout=str(path_x)).result()
42
+ assert not path_x.exists(), "For memoization, expected NO file written"
48
43
 
49
44
  # this should also be memoized, so not create an arbitrary name
50
45
  z_fut = no_checkpoint_stdout_app(stdout=parsl.AUTO_LOGNAME)
@@ -1,9 +1,7 @@
1
- import argparse
2
1
  import os
3
2
 
4
3
  import pytest
5
4
 
6
- import parsl
7
5
  from parsl import bash_app, python_app
8
6
  from parsl.tests.configs.local_threads import fresh_config
9
7
 
@@ -68,8 +66,6 @@ def test_fail_nowait(numtasks=10):
68
66
  assert isinstance(
69
67
  e, TypeError), "Expected a TypeError, got {}".format(e)
70
68
 
71
- print("Done")
72
-
73
69
 
74
70
  @pytest.mark.local
75
71
  def test_fail_delayed(numtasks=10):
@@ -94,19 +90,12 @@ def test_fail_delayed(numtasks=10):
94
90
  assert isinstance(
95
91
  e, TypeError), "Expected a TypeError, got {}".format(e)
96
92
 
97
- print("Done")
98
-
99
93
 
100
94
  @pytest.mark.local
101
- def test_retry():
95
+ def test_retry(tmpd_cwd):
102
96
  """Test retries via app that succeeds on the Nth retry.
103
97
  """
104
98
 
105
- fname = "retry.out"
106
- try:
107
- os.remove(fname)
108
- except OSError:
109
- pass
110
- fu = succeed_on_retry(fname)
111
-
112
- fu.result()
99
+ fpath = tmpd_cwd / "retry.out"
100
+ sout = str(tmpd_cwd / "stdout")
101
+ succeed_on_retry(str(fpath), stdout=sout).result()
@@ -0,0 +1,47 @@
1
+ import os
2
+ import signal
3
+
4
+ import pytest
5
+
6
+ import parsl
7
+ from parsl import Config, HighThroughputExecutor
8
+ from parsl.executors.high_throughput.errors import ManagerLost
9
+
10
+
11
+ @parsl.python_app
12
+ def get_manager_pgid():
13
+ import os
14
+ return os.getpgid(os.getpid())
15
+
16
+
17
+ @parsl.python_app
18
+ def lose_manager():
19
+ import os
20
+ import signal
21
+
22
+ manager_pid = os.getppid()
23
+ os.kill(manager_pid, signal.SIGSTOP)
24
+
25
+
26
+ @pytest.mark.local
27
+ def test_manager_lost_system_failure(tmpd_cwd):
28
+ hte = HighThroughputExecutor(
29
+ label="htex_local",
30
+ address="127.0.0.1",
31
+ max_workers_per_node=2,
32
+ cores_per_worker=1,
33
+ worker_logdir_root=str(tmpd_cwd),
34
+ heartbeat_period=1,
35
+ heartbeat_threshold=1,
36
+ )
37
+ c = Config(executors=[hte], strategy='simple', strategy_period=0.1)
38
+
39
+ with parsl.load(c):
40
+ manager_pgid = get_manager_pgid().result()
41
+ try:
42
+ with pytest.raises(ManagerLost):
43
+ lose_manager().result()
44
+ finally:
45
+ # Allow process to clean itself up
46
+ os.killpg(manager_pgid, signal.SIGCONT)
47
+ os.killpg(manager_pgid, signal.SIGTERM)
@@ -22,11 +22,11 @@ def test_files():
22
22
 
23
23
 
24
24
  @pytest.mark.local
25
- def test_open():
26
- with open('test-open.txt', 'w') as tfile:
27
- tfile.write('Hello')
25
+ def test_open(tmpd_cwd):
26
+ fpath = tmpd_cwd / 'test-open.txt'
27
+ fpath.write_text('Hello')
28
28
 
29
- pfile = File('test-open.txt')
29
+ pfile = File(fpath)
30
30
 
31
- with open(str(pfile), 'r') as opfile:
32
- assert (opfile.readlines()[0] == 'Hello')
31
+ with open(pfile) as opfile:
32
+ assert (opfile.read() == 'Hello')
parsl/version.py CHANGED
@@ -3,4 +3,4 @@
3
3
  Year.Month.Day[alpha/beta/..]
4
4
  Alphas will be numbered like this -> 2024.12.10a0
5
5
  """
6
- VERSION = '2024.06.24'
6
+ VERSION = '2024.07.01'
@@ -17,6 +17,7 @@ import zmq
17
17
 
18
18
  from parsl import curvezmq
19
19
  from parsl.app.errors import RemoteExceptionWrapper
20
+ from parsl.executors.high_throughput.errors import ManagerLost, VersionMismatch
20
21
  from parsl.executors.high_throughput.manager_record import ManagerRecord
21
22
  from parsl.monitoring.message_type import MessageType
22
23
  from parsl.process_loggers import wrap_with_logs
@@ -31,32 +32,6 @@ LOGGER_NAME = "interchange"
31
32
  logger = logging.getLogger(LOGGER_NAME)
32
33
 
33
34
 
34
- class ManagerLost(Exception):
35
- ''' Task lost due to manager loss. Manager is considered lost when multiple heartbeats
36
- have been missed.
37
- '''
38
- def __init__(self, manager_id: bytes, hostname: str) -> None:
39
- self.manager_id = manager_id
40
- self.tstamp = time.time()
41
- self.hostname = hostname
42
-
43
- def __str__(self) -> str:
44
- return "Task failure due to loss of manager {} on host {}".format(self.manager_id.decode(), self.hostname)
45
-
46
-
47
- class VersionMismatch(Exception):
48
- ''' Manager and Interchange versions do not match
49
- '''
50
- def __init__(self, interchange_version: str, manager_version: str):
51
- self.interchange_version = interchange_version
52
- self.manager_version = manager_version
53
-
54
- def __str__(self) -> str:
55
- return "Manager version info {} does not match interchange version info {}, causing a critical failure".format(
56
- self.manager_version,
57
- self.interchange_version)
58
-
59
-
60
35
  class Interchange:
61
36
  """ Interchange is a task orchestrator for distributed systems.
62
37
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.6.24
3
+ Version: 2024.7.1
4
4
  Summary: Simple data dependent workflows in Python
5
5
  Home-page: https://github.com/Parsl/parsl
6
- Download-URL: https://github.com/Parsl/parsl/archive/2024.06.24.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.07.01.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -8,7 +8,7 @@ parsl/multiprocessing.py,sha256=MyaEcEq-Qf860u7V98u-PZrPNdtzOZL_NW6EhIJnmfQ,1937
8
8
  parsl/process_loggers.py,sha256=uQ7Gd0W72Jz7rrcYlOMfLsAEhkRltxXJL2MgdduJjEw,1136
9
9
  parsl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  parsl/utils.py,sha256=91FjQiTUY383ueAjkBAgE21My9nba6SP2a2SrbB1r1Q,11250
11
- parsl/version.py,sha256=Oe-zqn8K6f0j2CiOdcXe-52-JTc_rWoNfhOpwvqryyg,131
11
+ parsl/version.py,sha256=rymKA_7RPC0NJoPK5DYnRc2K1WmH8LD0xsv3iQyTwDA,131
12
12
  parsl/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  parsl/app/app.py,sha256=D5Ok_gt99mlclM_QfZbquHUBkibyG4tYdUN9ijRwUnQ,8345
14
14
  parsl/app/bash.py,sha256=jm2AvePlCT9DZR7H_4ANDWxatp5dN_22FUlT_gWhZ-g,5528
@@ -79,9 +79,9 @@ parsl/executors/flux/execute_parsl_task.py,sha256=gRN7F4HhdrKQ-bvn4wXrquBzFOp_9W
79
79
  parsl/executors/flux/executor.py,sha256=gPq49CQwtSZYZggLZ0dCXdpUlllKHJbvR8WRKeGh9xE,16977
80
80
  parsl/executors/flux/flux_instance_manager.py,sha256=2KVcphlybF-ALYD_3_YjMUi0f5LkjdoJOT_783CW4H0,2036
81
81
  parsl/executors/high_throughput/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- parsl/executors/high_throughput/errors.py,sha256=77ZGrw9suLh9tSWjyhCaIvnC9nRAOmrXsZmvHM6nT68,626
83
- parsl/executors/high_throughput/executor.py,sha256=iRmAdQpHpmC0UDC5jDZ0O-BlZe_RhfItlqL5RIiD7os,37039
84
- parsl/executors/high_throughput/interchange.py,sha256=6avQQ8Ljtmuzpa5yjClswqdVEBPDnNBeKb_yn0XbVW4,31462
82
+ parsl/executors/high_throughput/errors.py,sha256=Sak8e8UpiEcXefUjMHbhyXc4Rn7kJtOoh7L8wreBQdk,1638
83
+ parsl/executors/high_throughput/executor.py,sha256=XO0QkRdQIXYUOdabTTIJ6HIlMai0Tvu78bYHMFT-tNc,37061
84
+ parsl/executors/high_throughput/interchange.py,sha256=IRuiaBmks_R4cU-Sx0Q_Fjv4PdFtzU05GiPdeJstOoA,30578
85
85
  parsl/executors/high_throughput/manager_record.py,sha256=9XppKjDW0DJ7SMkPNxsiDs-HvXGPLrTg6Ceyh4b6gNs,433
86
86
  parsl/executors/high_throughput/monitoring_info.py,sha256=HC0drp6nlXQpAop5PTUKNjdXMgtZVvrBL0JzZJebPP4,298
87
87
  parsl/executors/high_throughput/mpi_executor.py,sha256=B2CR1pHaGQzIwTrQ-_i08NZG-NwS6yr8y7nxPaa_rkA,3760
@@ -301,8 +301,8 @@ parsl/tests/test_bash_apps/test_error_codes.py,sha256=jJ3BwhFpvTGKElKyuiCMWFeBaV
301
301
  parsl/tests/test_bash_apps/test_keyword_overlaps.py,sha256=8bfN2qw4uXJsYquppR1lZQrYW834AZc3zjYIIHTfDoE,209
302
302
  parsl/tests/test_bash_apps/test_kwarg_storage.py,sha256=OMMD3sKSngBSjVCHK9wju0hHzszOqbYuWtscyMuh5_8,720
303
303
  parsl/tests/test_bash_apps/test_memoize.py,sha256=gFhDNFxdRv8DNtErbwtdEvAph6SDFPaWY0tABZGS4I4,1383
304
- parsl/tests/test_bash_apps/test_memoize_ignore_args.py,sha256=ffABk6psbjGYatZiUicb-BYLmzqnxbUCNhMh0h4Ctus,1322
305
- parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py,sha256=8geUkrr09Oc4ZfPklf-sHl5WErVjlfhuQvV7KJ_cOhM,1362
304
+ parsl/tests/test_bash_apps/test_memoize_ignore_args.py,sha256=dCDvf_iVuU5aq5gLlOUwcCZTbWtNJ4Uj0Zjx1ZbBOhQ,1257
305
+ parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py,sha256=3cMYYNhSncDshWfbbyMld5z1ZrJHPpxz_0u8DMBgRdA,1341
306
306
  parsl/tests/test_bash_apps/test_multiline.py,sha256=stpMEv2eopGG-ietxjUtD5gYMOVpwPdLauDizjUfTdA,1082
307
307
  parsl/tests/test_bash_apps/test_pipeline.py,sha256=1kQDD8-Dh5H9SKFcKHzN_mSrdxAV_VYzk8ZnDyna3l8,2444
308
308
  parsl/tests/test_bash_apps/test_std_uri.py,sha256=CvAt8BUhNl2pA5chq9YyhkD6eo2IUH6PjWfe3SQ-YRU,3752
@@ -330,7 +330,7 @@ parsl/tests/test_error_handling/test_fail.py,sha256=xx4TGWfL7le4cQ9nvnUkrlmKQJks
330
330
  parsl/tests/test_error_handling/test_python_walltime.py,sha256=rdmGZHIkuann2Njt3i62odKJ0FaODGr7-L96rOXNVYg,950
331
331
  parsl/tests/test_error_handling/test_rand_fail.py,sha256=crFg4GmwdDpvx49_7w5Xt2P7H2R_V9f6i1Ar-QkASuU,3864
332
332
  parsl/tests/test_error_handling/test_resource_spec.py,sha256=bk0h2KRZ1lKga_dfhkqq4-tvUJimPtO6gJikUzXJJrU,1565
333
- parsl/tests/test_error_handling/test_retries.py,sha256=Hgy-1y9nx-unB4KE2-Em3OUvdWxoYzAWq-EY7ImEgIE,2446
333
+ parsl/tests/test_error_handling/test_retries.py,sha256=zJ9D2hrvXQURnK2OIf5LfQFcSDVZ8rhdpp6peGccY7s,2372
334
334
  parsl/tests/test_error_handling/test_retry_handler.py,sha256=8fMHffMBLhRyNreIqkrwamx9TYRZ498uVYNlkcbAoLU,1407
335
335
  parsl/tests/test_error_handling/test_retry_handler_failure.py,sha256=GaGtZZCB9Wb7ieShqTrxUFEUSKy07ZZWytCY4Qixk9Y,552
336
336
  parsl/tests/test_error_handling/test_serialization_fail.py,sha256=5nnGyaOH0Quyjo3eTKkDfAvYcNYxL8OfMi1KccyncaM,647
@@ -427,6 +427,7 @@ parsl/tests/test_scaling/test_scale_down_htex_unregistered.py,sha256=4DYZB9BMDzy
427
427
  parsl/tests/test_scaling/test_shutdown_scalein.py,sha256=Jzi0OH7UE6qvQ4ZpsfHu8lySpkMDgorn2elAzMNE6wI,2397
428
428
  parsl/tests/test_serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
429
429
  parsl/tests/test_serialization/test_2555_caching_deserializer.py,sha256=jEXJvbriaLVI7frV5t-iJRKYyeQ7a9_-t3X9lhhBWQo,767
430
+ parsl/tests/test_serialization/test_3495_deserialize_managerlost.py,sha256=23phMEstEWWQUHxlyZh4Ta1DC94by8f_-OYCcykyNu8,1144
430
431
  parsl/tests/test_serialization/test_basic.py,sha256=4_1Rkq5tNl9EC0nfneF8kHTws7I0E6ovE_0DE97BEfU,544
431
432
  parsl/tests/test_serialization/test_htex_code_cache.py,sha256=dd0XwlNDn6Lgj6-nHHjYWzl1FnhFLY_8Buxj77dyZ28,1840
432
433
  parsl/tests/test_serialization/test_pack_resource_spec.py,sha256=-Vtyh8KyezZw8e7M2Z4m3LawY1Au4U-H3KRmVKXSut0,641
@@ -440,7 +441,7 @@ parsl/tests/test_staging/test_1316.py,sha256=eS0e2BDM2vmPNF60aDr35wcuGgDPfXjTjRV
440
441
  parsl/tests/test_staging/test_docs_1.py,sha256=HxFoBYRNkoJoCDIok9QEIDJLICmaF3RCklSWYtG8BEQ,628
441
442
  parsl/tests/test_staging/test_docs_2.py,sha256=DrxoUVowwzdQebewfyQ6v-IHVFJfs5qGzWVQ4UVSbkA,464
442
443
  parsl/tests/test_staging/test_elaborate_noop_file.py,sha256=8FHXraFrXDBB2wsKx15AQ6vOgpWwtDL6O6PejOkfdOM,2448
443
- parsl/tests/test_staging/test_file.py,sha256=Dqen1RJ-uLfzX8xIyJN2Qw3oVy4cFkQQVh6KC72xFDA,950
444
+ parsl/tests/test_staging/test_file.py,sha256=Jsmn-4jaIuMz6ocmACMJmylx-thKky7QGWISkl4Mxjs,924
444
445
  parsl/tests/test_staging/test_file_apps.py,sha256=zTwLAf4R-lFLoqeyz9ZfFeVTs9PL9dmpKjeZEVG7C2s,1540
445
446
  parsl/tests/test_staging/test_file_staging.py,sha256=PTBZhTQJsNtUi38uUZOdIb8yw18-qxMoY9GFodzPYuE,674
446
447
  parsl/tests/test_staging/test_output_chain_filenames.py,sha256=9Mxfl9oU_x1ZSP8JSxT_t4WFCfDTprLjSeFNMm4vVxA,894
@@ -464,13 +465,13 @@ parsl/usage_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
464
465
  parsl/usage_tracking/api.py,sha256=iaCY58Dc5J4UM7_dJzEEs871P1p1HdxBMtNGyVdzc9g,1821
465
466
  parsl/usage_tracking/levels.py,sha256=xbfzYEsd55KiZJ-mzNgPebvOH4rRHum04hROzEf41tU,291
466
467
  parsl/usage_tracking/usage.py,sha256=qNEJ7nPimqd3Y7OWFLdYmNwJ6XDKlyfV_fTzasxsQw8,8690
467
- parsl-2024.6.24.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
468
- parsl-2024.6.24.data/scripts/interchange.py,sha256=kI1fSF30txw_eEicPSsxbycuz6Sdxiiyy2xrrk7jlZU,31449
469
- parsl-2024.6.24.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
470
- parsl-2024.6.24.data/scripts/process_worker_pool.py,sha256=weug6_LAMbqEKQhiI6ZMg8r3e-XBDw1-L5_COEt7caM,41879
471
- parsl-2024.6.24.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
472
- parsl-2024.6.24.dist-info/METADATA,sha256=--saDEksktTAsMhTeFRsbVuLvONDrSTQ9-mFrcTUaHU,4124
473
- parsl-2024.6.24.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
474
- parsl-2024.6.24.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
475
- parsl-2024.6.24.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
476
- parsl-2024.6.24.dist-info/RECORD,,
468
+ parsl-2024.7.1.data/scripts/exec_parsl_function.py,sha256=RUkJ4JSJAjr7YyRZ58zhMdg8cR5dVV9odUl3AuzNf3k,7802
469
+ parsl-2024.7.1.data/scripts/interchange.py,sha256=n0aOHLX64DEWx-OA4vWrYRVZfmaz8Rc8haNtafbgh4k,30565
470
+ parsl-2024.7.1.data/scripts/parsl_coprocess.py,sha256=zrVjEqQvFOHxsLufPi00xzMONagjVwLZbavPM7bbjK4,5722
471
+ parsl-2024.7.1.data/scripts/process_worker_pool.py,sha256=weug6_LAMbqEKQhiI6ZMg8r3e-XBDw1-L5_COEt7caM,41879
472
+ parsl-2024.7.1.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357
473
+ parsl-2024.7.1.dist-info/METADATA,sha256=TQ_3YOcktX94s5XnASKWQNt2X2bp6pQHIG3ocx71qTY,4123
474
+ parsl-2024.7.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
475
+ parsl-2024.7.1.dist-info/entry_points.txt,sha256=XqnsWDYoEcLbsMcpnYGKLEnSBmaIe1YoM5YsBdJG2tI,176
476
+ parsl-2024.7.1.dist-info/top_level.txt,sha256=PIheYoUFQtF2icLsgOykgU-Cjuwr2Oi6On2jo5RYgRM,6
477
+ parsl-2024.7.1.dist-info/RECORD,,