parsl 2025.9.8__py3-none-any.whl → 2025.9.15__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.

Potentially problematic release.


This version of parsl might be problematic. Click here for more details.

Files changed (28) hide show
  1. parsl/curvezmq.py +0 -16
  2. parsl/executors/high_throughput/executor.py +8 -0
  3. parsl/executors/high_throughput/interchange.py +10 -1
  4. parsl/executors/high_throughput/zmq_pipes.py +29 -43
  5. parsl/monitoring/monitoring.py +2 -2
  6. parsl/multiprocessing.py +0 -49
  7. parsl/tests/test_curvezmq.py +0 -42
  8. parsl/tests/test_htex/test_command_concurrency_regression_1321.py +54 -0
  9. parsl/tests/test_htex/test_interchange_exit_bad_registration.py +2 -1
  10. parsl/tests/test_htex/test_priority_queue.py +1 -0
  11. parsl/tests/test_htex/test_zmq_binding.py +2 -1
  12. parsl/version.py +1 -1
  13. {parsl-2025.9.8.data → parsl-2025.9.15.data}/scripts/interchange.py +10 -1
  14. {parsl-2025.9.8.dist-info → parsl-2025.9.15.dist-info}/METADATA +2 -2
  15. {parsl-2025.9.8.dist-info → parsl-2025.9.15.dist-info}/RECORD +22 -27
  16. parsl/tests/site_tests/test_provider.py +0 -88
  17. parsl/tests/site_tests/test_site.py +0 -70
  18. parsl/tests/test_aalst_patterns.py +0 -474
  19. parsl/tests/test_docs/test_workflow2.py +0 -42
  20. parsl/tests/test_error_handling/test_rand_fail.py +0 -171
  21. parsl/tests/test_regression/test_854.py +0 -62
  22. {parsl-2025.9.8.data → parsl-2025.9.15.data}/scripts/exec_parsl_function.py +0 -0
  23. {parsl-2025.9.8.data → parsl-2025.9.15.data}/scripts/parsl_coprocess.py +0 -0
  24. {parsl-2025.9.8.data → parsl-2025.9.15.data}/scripts/process_worker_pool.py +0 -0
  25. {parsl-2025.9.8.dist-info → parsl-2025.9.15.dist-info}/LICENSE +0 -0
  26. {parsl-2025.9.8.dist-info → parsl-2025.9.15.dist-info}/WHEEL +0 -0
  27. {parsl-2025.9.8.dist-info → parsl-2025.9.15.dist-info}/entry_points.txt +0 -0
  28. {parsl-2025.9.8.dist-info → parsl-2025.9.15.dist-info}/top_level.txt +0 -0
@@ -1,171 +0,0 @@
1
- import argparse
2
-
3
- import pytest
4
-
5
- import parsl
6
- from parsl.app.app import python_app
7
- from parsl.tests.configs.local_threads import fresh_config
8
-
9
-
10
- def local_config():
11
- c = fresh_config()
12
- c.retries = 2
13
- return c
14
-
15
-
16
- @python_app
17
- def sleep_fail(sleep_dur, sleep_rand_max, fail_prob, inputs=[]):
18
- import random
19
- import time
20
-
21
- s = sleep_dur + random.randint(-sleep_rand_max, sleep_rand_max)
22
-
23
- time.sleep(s)
24
- x = float(random.randint(0, 100)) / 100
25
- if x <= fail_prob:
26
- # print("Fail")
27
- raise Exception("App failure")
28
- else:
29
- pass
30
- # print("Succeed")
31
-
32
-
33
- @python_app
34
- def double(x):
35
- return x * 2
36
-
37
-
38
- @pytest.mark.local
39
- def test_simple(n=10):
40
- import time
41
- start = time.time()
42
- x = double(n)
43
- print("Result : ", x.result())
44
- assert x.result() == n * \
45
- 2, "Expected double to return:{0} instead got:{1}".format(
46
- n * 2, x.result())
47
- print("Duration : {0}s".format(time.time() - start))
48
- print("[TEST STATUS] test_parallel_for [SUCCESS]")
49
- return True
50
-
51
-
52
- @pytest.mark.skip('broken')
53
- def test_no_deps(numtasks=10):
54
- """Test basic error handling, with no dependent failures
55
- """
56
-
57
- fus = []
58
- for i in range(0, 10):
59
-
60
- fu = sleep_fail(0.1, 0, .8)
61
- fus.extend([fu])
62
-
63
- count = 0
64
- for fu in fus:
65
- try:
66
- fu.result()
67
- except Exception as e:
68
- print("Caught exception : ", "*" * 20)
69
- print(e)
70
- print("*" * 20)
71
- count += 1
72
-
73
- print("Caught failures of {0}/{1}".format(count, len(fus)))
74
-
75
-
76
- @pytest.mark.skip('broken')
77
- def test_fail_sequence(numtasks=10):
78
- """Test failure in a sequence of dependencies
79
-
80
- App1 -> App2 ... -> AppN
81
- """
82
-
83
- sleep_dur = 0.1
84
- fail_prob = 0.4
85
-
86
- fus = {0: None}
87
- for i in range(0, numtasks):
88
- print("Chaining {0} to {1}".format(i + 1, fus[i]))
89
- fus[i + 1] = sleep_fail(sleep_dur, 0, fail_prob, inputs=[fus[i]])
90
-
91
- # time.sleep(numtasks*sleep_dur)
92
- for k in sorted(fus.keys()):
93
- try:
94
- x = fus[i].result()
95
- print("{0} : {1}".format(k, x))
96
- except Exception as e:
97
- print("{0} : {1}".format(k, e))
98
-
99
- return
100
-
101
-
102
- @pytest.mark.skip('broken')
103
- def test_deps(numtasks=10):
104
- """Random failures in branches of Map -> Map -> reduce
105
-
106
- App1 App2 ... AppN
107
- """
108
-
109
- fus = []
110
- for i in range(0, numtasks):
111
- fu = sleep_fail(0.2, 0, .4)
112
- fus.extend([fu])
113
-
114
- # App1 App2 ... AppN
115
- # | | |
116
- # V V V
117
- # App1 App2 ... AppN
118
-
119
- fus_2 = []
120
- for fu in fus:
121
- fu = sleep_fail(0, 0, .8, inputs=[fu])
122
- fus_2.extend([fu])
123
-
124
- # App1 App2 ... AppN
125
- # | | |
126
- # V V V
127
- # App1 App2 ... AppN
128
- # \ | /
129
- # \ | /
130
- # App_Final
131
-
132
- fu_final = sleep_fail(1, 0, 0, inputs=fus_2)
133
-
134
- try:
135
- print("Final status : ", fu_final.result())
136
- except parsl.dataflow.errors.DependencyError as e:
137
- print("Caught the right exception")
138
- print("Exception : ", e)
139
- except Exception as e:
140
- assert 5 == 1, "Expected DependencyError got : %s" % e
141
- else:
142
- print("Shoot! no errors ")
143
-
144
-
145
- @python_app
146
- def sleep_then_fail(sleep_dur=0.1):
147
- import math
148
- import time
149
- time.sleep(sleep_dur)
150
- math.ceil("Trigger TypeError")
151
- return 0
152
-
153
-
154
- @pytest.mark.skip('broken')
155
- def test_fail_nowait(numtasks=10):
156
- """Test basic error handling, with no dependent failures
157
- """
158
- import time
159
- fus = []
160
- for i in range(0, numtasks):
161
- fu = sleep_then_fail(sleep_dur=0.1)
162
- fus.extend([fu])
163
-
164
- try:
165
- [x.result() for x in fus]
166
- except Exception as e:
167
- assert isinstance(e, TypeError), "Expected a TypeError, got {}".format(e)
168
-
169
- # fus[0].result()
170
- time.sleep(1)
171
- print("Done")
@@ -1,62 +0,0 @@
1
- import multiprocessing
2
- import random
3
- import time
4
-
5
- import pytest
6
-
7
- from parsl.multiprocessing import MacSafeQueue
8
-
9
-
10
- def consumer(in_q, out_q, delay=0):
11
- while True:
12
- x = in_q.get()
13
- time.sleep(delay)
14
- if x == 'STOP':
15
- out_q.put('STOPPED')
16
- break
17
- else:
18
- out_q.put(x)
19
-
20
-
21
- @pytest.mark.local
22
- def test_mac_safe_queue():
23
- """ Regression test for HTEX being broken on Mac OS: https://github.com/Parsl/parsl/issues/854
24
- This test doesn't test the fix on mac's however it tests a multiprocessing queue replacement
25
- that is safe to run on Mac OS.
26
- """
27
- task_q = MacSafeQueue()
28
- result_q = MacSafeQueue()
29
-
30
- p = multiprocessing.Process(target=consumer, args=(task_q, result_q,))
31
- p.start()
32
- for i in range(10):
33
- task_q.put(i)
34
- result_q.get()
35
- task_q.put('STOP')
36
- r = result_q.get()
37
- assert r == 'STOPPED', "Did not get stopped confirmation, got:{}".format(r)
38
- p.terminate()
39
-
40
-
41
- @pytest.mark.local
42
- def test_mac_safe_queue_size():
43
- """ Regression test for HTEX being broken on Mac OS: https://github.com/Parsl/parsl/issues/854
44
- This test doesn't test the fix on mac's however it tests a multiprocessing queue replacement
45
- that is safe to run on Mac OS.
46
- """
47
- task_q = MacSafeQueue()
48
- result_q = MacSafeQueue()
49
-
50
- x = random.randint(1, 100)
51
-
52
- [task_q.put(i) for i in range(x)]
53
- assert task_q.empty() is False, "Task queue should not be empty"
54
- assert task_q.qsize() == x, "Task queue should be {}; instead got {}".format(x, task_q.qsize())
55
-
56
- p = multiprocessing.Process(target=consumer, args=(task_q, result_q,))
57
- p.start()
58
- task_q.put('STOP')
59
- p.join()
60
- assert result_q.empty() is False, "Result queue should not be empty"
61
- qlen = result_q.qsize()
62
- assert qlen == x + 1, "Result queue should be {}; instead got {}".format(x + 1, qlen)