我有一个具有一台服务器和多个客户端的应用程序。 (服务器是图像分类器,每个客户端可以是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。我对多线程/多处理非常陌生。也许一般的工作模式与我的想法完全不同。只是给一些 方向会很棒!