具有单个服务器进程间通信的多个客户端,每个客户端如何取回自己的任务结果?

时间:2018-12-04 16:54:11

标签: python ipc message-queue

我有一个具有一台服务器和多个客户端的应用程序。 (服务器是图像分类器,每个客户端可以是Flask Web服务器中的一个请求处理程序。)每个cl \ ient将任务提交给服务器,每个客户端独立运行而无需其他客户端。

问题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(item),然后再执行shared_queue.get(item),他们可能会得到其他客户端提交的项目,对吧?

问题2:我应该为每个客户创建一个单独的队列吗? (这样他们就可以取回自己的结果,而不是与其他客户端的任务混在一起)

问题3:有没有一种方法可以运行两个独立的python脚本,然后将shared_queue的名称传递给它们? (我正在使用Ubuntu,也许是这样\ 用于创建命名队列的Linux API,并传递到python脚本中以供使用))。或者,我是否必须使用第三种流程(即消息代理)来同时提供\  服务器和客户端使用消息队列?

问题4:服务器处理完每个任务后,需要将结果(例如图像分类结果)传递给客户端。我是否必须使用其他消息 排队做那件事?即我总是要维护两个队列,一个用于输入,一个用于结果?

- ps。我对多线程/多处理非常陌生。也许一般的工作模式与我的想法完全不同。只是给一些 方向会很棒!

0 个答案:

没有答案