|
1 | 1 | import unittest |
2 | 2 | from parallelpipe import Stage, TaskException, stage, map_stage |
| 3 | +from time import sleep |
3 | 4 |
|
4 | 5 | def t1(x, fail_at=None): |
5 | 6 | """Produce values from the given input iterator. |
@@ -124,15 +125,15 @@ def test_exception_propagation(self): |
124 | 125 | reducer = Stage(t3, sum).setup(workers=2, qsize=3) |
125 | 126 | pipe = producer | mapper | reducer |
126 | 127 |
|
127 | | - with self.assertRaisesRegexp(TaskException, "failed at 200"): |
| 128 | + with self.assertRaisesRegex(TaskException, "failed at 200"): |
128 | 129 | for res in pipe.results(): |
129 | 130 | pass |
130 | 131 |
|
131 | 132 |
|
132 | 133 | producer = Stage(t1, range(1000), 10).setup(workers=2, qsize=10) |
133 | 134 | pipe = producer | mapper | reducer |
134 | 135 |
|
135 | | - with self.assertRaisesRegexp(TaskException, "failed at 10"): |
| 136 | + with self.assertRaisesRegex(TaskException, "failed at 10"): |
136 | 137 | for res in pipe.results(): |
137 | 138 | pass |
138 | 139 |
|
@@ -178,10 +179,37 @@ def consume(n): |
178 | 179 | res = (range(1000) | fail2(5) | consume).execute() |
179 | 180 | self.assertEqual(res, 10) |
180 | 181 |
|
181 | | - with self.assertRaisesRegexp(TaskException, "failure"): |
| 182 | + with self.assertRaisesRegex(TaskException, "failure"): |
182 | 183 | (range(1000) | fail1(5) | consume).execute() |
| 184 | + |
| 185 | + def test_slow_second_stage(self): |
| 186 | + |
| 187 | + @stage(workers=2) |
| 188 | + def mapit(it): |
| 189 | + for item in it: |
| 190 | + yield item + 1 |
183 | 191 |
|
| 192 | + @stage(workers=1) |
| 193 | + def reduce(it): |
| 194 | + sleep(3) # simulate a long startup time |
| 195 | + tot = 0 |
| 196 | + for item in it: |
| 197 | + tot += item |
| 198 | + sleep(2) |
| 199 | + yield 5 |
| 200 | + yield tot |
| 201 | + |
| 202 | + @stage(workers=2) |
| 203 | + def write(it): |
| 204 | + for item in it: |
| 205 | + yield item |
| 206 | + |
| 207 | + res = list(([1] | mapit | reduce | write).results()) |
| 208 | + self.assertEqual(res, [5, 2]) |
| 209 | + |
184 | 210 |
|
185 | 211 | if __name__ == '__main__': |
| 212 | + import multiprocessing |
| 213 | + multiprocessing.set_start_method('fork', force=False) |
186 | 214 | unittest.main() |
187 | 215 |
|
0 commit comments