【发布时间】:2013-10-10 03:31:19
【问题描述】:
我有一个服务器和几个客户端。它们都共享一个任务和结果 multiprocessing.Queue。但是,每当客户端完成任务并将结果放入结果队列时,我希望服务器查看结果,并在此基础上重新排序任务队列。
这当然意味着从任务队列中弹出所有内容并重新添加。在这个重新排序过程中,我希望客户端阻止接触任务队列。我的问题是如何让服务器识别何时将任务添加到结果队列并通过锁定任务队列并在保护队列的同时重新排序来做出反应。不变的是,在客户端获得新任务之前,服务器必须在返回每个结果后重新排序。
我想一个简单(但错误)的方法是让 multiprocessing.Value 充当布尔值,每当添加结果时,客户端都会将其翻转为 True,这意味着已添加结果。服务器可以轮询以获取此值,但最终它可能会错过另一个在轮询之间进入并添加另一个结果的客户端。
任何想法表示赞赏。
** 'multithreading' 标签只是因为它的思想与线程非常相似,我认为这里的进程/线程区别并不重要。
【问题讨论】:
-
我不确定您遇到的问题。问题是如何保护队列或如何在新结果到达时通知服务器?服务器在剩下的时间里需要做什么?我认为它不能仅仅阻塞在 result_queue.get() 中。
-
服务器是监听客户端连接的地方,也是存储内存所在的地方
-
一个进程(可能是服务器)可以监听结果队列,但它必须做出反应并在成功时立即尝试锁定任务队列,这与轮询情况相同,有效
标签: python multithreading client-server queue multiprocessing