Python Glossary English

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Сообщить о неточности