Несколько клиентов с межпроцессным взаимодействием на одном сервере, как каждый клиент получает свой собственный результат задачи? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть приложение с одним сервером и несколькими клиентами.(сервер является классификатором изображений, каждый клиент может быть одним обработчиком запросов в веб-сервере 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: после того, как сервер обрабатывает каждую задачу, он должен пройтирезультат (например, результат классификации изображений) для клиента.Должен ли я использовать другое сообщение \ очередь, чтобы сделать это?т.е. я всегда поддерживаю две очереди, одну для ввода, одну для результата?

- пс.Я довольно новичок в многопоточности / многопоточности.Может быть, общая схема работы совершенно отличается от того, что я имею в виду.Просто дать некоторые направления было бы здорово!

...