|
1 | 1 | from multiprocessing import Queue |
| 2 | +import os |
2 | 3 |
|
3 | 4 | import pytest |
4 | 5 |
|
@@ -37,3 +38,35 @@ def test_pass_messages_via_process_manager(manager_cls): |
37 | 38 | process.message_queue.put('msg1') |
38 | 39 | msg = process_manager.finished_queue.get() |
39 | 40 | assert msg == 'done value msg1' |
| 41 | + |
| 42 | + |
| 43 | +@pytest.mark.parametrize('manager_cls', [ProcessManager, ForkServerManager]) |
| 44 | +def test_workers_have_different_pid(manager_cls): |
| 45 | + process_manager = manager_cls() |
| 46 | + processes = [process_manager.create_process((f'value{i}',), target=work_loop2) for i in range(2)] |
| 47 | + |
| 48 | + for i in range(2): |
| 49 | + process = processes[i] |
| 50 | + process.start() |
| 51 | + process.message_queue.put(f'msg{i}') |
| 52 | + |
| 53 | + assert processes[0].pid != processes[1].pid # title of test |
| 54 | + |
| 55 | + msg1 = process_manager.finished_queue.get() |
| 56 | + msg2 = process_manager.finished_queue.get() |
| 57 | + assert set([msg1, msg2]) == set(['done value1 msg1', 'done value0 msg0']) |
| 58 | + |
| 59 | + |
| 60 | + |
| 61 | +def return_pid(in_q, out_q): |
| 62 | + out_q.put(f'{os.getpid()}') |
| 63 | + |
| 64 | + |
| 65 | +@pytest.mark.parametrize('manager_cls', [ProcessManager, ForkServerManager]) |
| 66 | +def test_pid_is_correct(manager_cls): |
| 67 | + process_manager = manager_cls() |
| 68 | + process = process_manager.create_process((), target=return_pid) |
| 69 | + process.start() |
| 70 | + |
| 71 | + msg = process_manager.finished_queue.get() |
| 72 | + assert int(msg) == process.pid |
0 commit comments