У меня есть приложение с одним сервером и несколькими клиентами.(сервер является классификатором изображений, каждый клиент может быть одним обработчиком запросов в веб-сервере Flask.) Каждый клиент будет отправлять задачи на сервер, каждый клиент работает независимо, без ведома других клиентов.
ВОПРОС 1. Какой рекомендуемый шаблон для межпроцессного взаимодействия для такого приложения?
server.py:
import multiprocessing.Queue
def main(shared_queue): # shared_queue: the same queue shared by the single server and all clients
while item=shared_queue.get():
result=process(item)
item.task_done()
client.py:
def submit_to_server_and_get_result(shared_queue, item_to_process):
shared_queue.put(item_to_process)
# I put the item_to_process here, but where to query the result? Shall I create a dedicated result_shared_queue?
До сих пор я изучал модель «производитель-потребитель».Итак, я разработал схему ниже, где сервер и 3 клиента используют одну и ту же очередь, но я не думаю, что это сработает, потому что я не смог найти способ, позволяющий каждому клиенту вернуть свои собственные результаты задачи.Клиенты делят очередь, поэтому, если каждый из них делает shared_queue.put (элемент), затем shared_queue.get (элемент), они могут получить элемент, отправленный другими клиентами, верно?
Вопрос 2: Должен ли ясоздать отдельную очередь для каждого клиента?(чтобы они могли получить свой собственный результат, вместо того, чтобы смешивать его с задачей другого клиента)
Вопрос 3. Есть ли способ запустить два независимых скрипта python и передать им имя shared_queue?(Я использую Ubuntu, может быть, есть так-же Linux API для создания именованных очередей и перехода в скрипт python для использования).Или мне нужно использовать третий процесс (т. Е. Брокер сообщений), чтобы предоставить \ серверу и клиенту очередь сообщений для использования?
Вопрос 4: после того, как сервер обрабатывает каждую задачу, он должен пройтирезультат (например, результат классификации изображений) для клиента.Должен ли я использовать другое сообщение \ очередь, чтобы сделать это?т.е. я всегда поддерживаю две очереди, одну для ввода, одну для результата?
- пс.Я довольно новичок в многопоточности / многопоточности.Может быть, общая схема работы совершенно отличается от того, что я имею в виду.Просто дать некоторые направления было бы здорово!