@to_east

Python обмен данными между процессами через Пайпы?

Приветствую участников тостера!
Объясните пожалуйста один момент, при использовании Pipes в документации есть одна оговорка, что данные могут быть повреждены, если два или более процесса, используют один конец трубы.
То есть правильно ли я понимаю что потребитель должен быть один и только один, который вызывает recv() из трубы, но Производителей может быть один или более, при том что порядок поступления данных неважен.
Или же все-таки придерживаться строгой схемы Производитель-Потребитель.

И еще один вопрос: Производитель отправляет данные вызывая функцию send(), Потребителю сразу может считать эти данные, или пока Производитель не закроет пайп(close()), данные не будут доступны для Потребителя?
  • Вопрос задан
  • 433 просмотра
Пригласить эксперта
Ответы на вопрос 2
@deliro
То есть правильно ли я понимаю что потребитель должен быть один и только один

Да, это написано в документации. В противном случае используй Queue или его производные.
Ответ написан
Комментировать
@to_east Автор вопроса
Немного не по теме спрошу, а возможно ли использовать Queue вместе с asyncio, для предотвращения гонок в совместно используемых данных, несколькими роутинами.
И еще вопрос. На днях ознакомился навскидку с асинхронным программированием в Python, по сути все выполняется в одном потоке, просто эффективно распределяется процессорное время между тасками(поправьте, если не верно, или неточно), так вот зачем необходимы примитивы синхронизации, такие как Lock, Event, Condition, Semaphore(в модуле asyncio), если доступ имеет только один поток в одно время?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы