7: def read(original_work_units_by_id)
8: work_units_by_id = original_work_units_by_id.dup
9: errors = 0
10:
11: begin
12: until errors == work_units_by_id.size
13: Thread.pass
14: result = @blackboard.take_result
15: next if result.nil?
16:
17: if Worker::Error === result
18: puts result
19: errors += 1
20: else
21: if result.respond_to?(:output) && (output = result.output)
22: print output
23: end
24:
25: work_unit = work_units_by_id.delete(result.identifier)
26: yield [work_unit, result]
27: end
28: end
29: rescue Server::ResultOverdueError
30: DeepTest.logger.error("Results are overdue from server, ending run")
31: end
32:
33: work_units_by_id
34: end