может запускать этот клиент много раз параллельно
Ну, на самом деле не может .
Хотя это утверждение, как полагают, было представлено в доброй воле, чтобы что-то объяснить, оно может и на самом деле сильно подрывает общую точку зрения информатики о том, как все работает, поскольку оно ужасно вводит в заблуждение.
Оператор локального хоста может запускать клиентский код на основе ZeroMQ много раз одновременно [True]
распределенная система может выполнять клиентский код на основе ZeroMQ много раз одновременно [True]
[любая экосистема] может выполнять клиентский код на основе ZeroMQ много раз параллельно [False]
Никто не может и никогда не будет. Ни один превосходный язык параллельной обработки Cray chapel не может этого добиться, поскольку ZeroMQ - это, в основном, асинхронная, "просто" - [CONCURRENT]
экосистема планирования процессов, где каждый основной механизм, работает внутри каждого из Context()
-экземпляров, работает внутренний пул из 1+ потоков ввода-вывода (ну, фактически, 0+, если пуристы требуют особого случая: o)), как известно, является асинхронным по своей сути и не зависит от потока внешних событий, так что действительно никогда не может быть истинным - [PARALLEL]
планирование процесса может появиться здесь.
Вначале можно прочесть краткий обзор вводного представления об основных концептуальных элементах, кратко изложенный в разделе [ Иерархия ZeroMQ менее чем за пять секунд ], так как Помогите нам говорить на одном языке, чтобы глубже взглянуть на возможности домена с распределенной системой на базе ZeroMQ.
Как использовать связь сервер-клиент и клиент-сервер одновременно на одном ПК?
Легко:
Один компьютер может сначала запустить интерпретатор Python, выполняющий код server.py
. Затем можно запустить второй интерпретатор Python (будь то в другом терминале Linux, или в окне Windows или cmd
-shell) и запустить код client.py
. Это будет работать как шарм.
Если вас интересуют подробности, имейте в виду, что REQ/REP
Масштабируемый формальный образец археологического обмена принципиально опасен для любого профессионального кода профессионального уровня, поскольку он может (и будет) легко превращаться распределенная система в принципиально невозможную, не подлежащую спасению взаимную взаимную блокировку (просто распределенная пара FSA: FSA может перейти в состояние мертвой блокировки, из которой ни одна из сторон не может спасти и продолжить поток взаимного сотрудничества)
Нужно ли создавать нити для достижения этой цели?
Ну, на самом деле, многие потоки уже работают "изнутри", если нет других, есть несколько потоков уже внутри каждого python + ZeroMQ Context()
композиция.
Если вы намеревались указать коду Python, чтобы он начал использовать большее количество потоков, о таких намерениях должно быть больше подробностей, прежде чем можно будет помочь в решении этой дилеммы. Есть также главный недостаток использования потоков - известная Python GIL-блокировка фактически делает любую такую попытку в чисто-1079 *[SERIAL]
, да, пошаговое последовательно упорядоченное выполнение кода (как это помогает сохранить влияние GIL-протектора на монопольный доступ к данным (выполнение кода [SERIAL]
никогда не приводит к коллизионному случаю неатомарной записи (записей), тем меньше условие гонки, поскольку GIL-степпинг фактически делает каждая операция - атомарный шаг - конечно, ценой прерывания, [SERIAL] GIL-пошаговое выполнение всех графов выполнения кода пула потоков. Безопасно? Хорошо, да, но медленнее, чем необходимо).
Лучший следующий шаг?
Если действительно серьезно и стремиться погрузиться в проект [распределенной системы], лучшим следующим шагом будет чтение невероятной книги Питера ХИНТЖЕНСА [ Code Connected, Volume 1 ] (pdf онлайн), где все время и усилия хорошо вознаграждаются благодаря получению тщательно продуманных практических взглядов и большого количества опыта, так что необходимо выжать из ZeroMQ как можно больше, и это доставит дальнейшие умные разработки.
Оставайтесь с нами, это шаг в правильном направлении.