Python 3.4+multiprocessingпонятие
multiprocessing.SimpleQueue
обмен данными
Упрощённая очередь между процессами: только put(), get(), empty() и close(), без фонового потока, таймаутов и maxsize.
Синтаксис
q = ctx.SimpleQueue(); q.put(obj); q.get(); q.empty(); q.close()
Без фонового потока put() пишет в канал сам: ошибка pickle вылетает прямо из put(), а не теряется в stderr, но при переполненном канале put() блокируется, пока читатель не заберёт данные. У get() нет timeout — если никто не пишет, ждать будет вечно. Это не queue.SimpleQueue из модуля queue: та для потоков и между процессами не работает. close() появился в 3.9.
Примеры
import multiprocessing as mp
def worker(q):
q.put('ready')
if __name__ == '__main__':
ctx = mp.get_context('spawn')
q = ctx.SimpleQueue()
p = ctx.Process(target=worker, args=(q,))
p.start()
print(q.get()) # → ready
p.join()
q.close()
import multiprocessing as mp
if __name__ == '__main__':
q = mp.get_context('spawn').SimpleQueue()
try:
q.put(lambda: 1)
except Exception as e:
print('raised at put:', type(e).__name__) # → raised at put: PicklingError
print(q.empty()) # → True
q.close()
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности