def test_drain_queue(): Q = MPQueue() items = list(Q.drain()) assert items == [] expected = [f"ITEM{idx}" for idx in range(10)] for item in expected: Q.put(item) items = list(Q.drain()) assert items == expected num_left = Q.safe_close() assert num_left == 0
def _proc_worker_wrapper_helper(caplog, worker_class, args=None, expect_shutdown_evt=True, alarm_secs=1.0): startup_evt = mp.Event() shutdown_evt = mp.Event() event_q = MPQueue() if args is None: args = () def alarm_handler(signal_num, current_stack_frame): shutdown_evt.set() if alarm_secs: signal.signal(signal.SIGALRM, alarm_handler) signal.setitimer(signal.ITIMER_REAL, alarm_secs) caplog.set_level(logging.DEBUG) exitcode = proc_worker_wrapper(worker_class, "TEST", startup_evt, shutdown_evt, event_q, *args) assert startup_evt.is_set() assert shutdown_evt.is_set() == expect_shutdown_evt items = list(event_q.drain()) assert items last_item = items[-1] assert last_item.msg_src == "TEST" assert last_item.msg_type == "SHUTDOWN" assert last_item.msg == "Normal" assert exitcode == 0 return items[:-1]