我正在实现一个多进程的Web搜寻器。我使用Manager()。Queue()创建了搜寻器将下载的文件名队列。所有进程共享同一队列,并且它们还在队列上执行put()和get()操作。当我读到Queue()类时,它是线程安全的,可以使我的队列成为阻塞队列,这解决了进程尝试从空队列中获取(一个)项的问题。但是,另一个问题发生了:当队列最终只有几个项目时,某个进程(例如进程1)检测到它是非空的,然后所有这些项目都被另一个进程(例如进程2)弹出,然后进程1尝试执行以下操作: get()队列中的一个项目,但发现它为空,因此对它的get()调用将永远阻塞。
尝试的解决方案:允许get()超时,所以当发生超时时,get()将引发“队列为空”异常,然后使进程退出
但是似乎该解决方案无法正常工作,因为有时程序会停留在process.join()阶段。
有人可以帮我吗?我的英语不好,但是如果您能考虑这个问题,我将不胜感激。谢谢。