我正在设计一个有点软的东西,其中包括:
在互联网上获取资源,
一些用户交互(资源的快速编辑),
一些处理。
我想用很多资源来做到这一点(它们都列在一个列表中)。每个都独立于其他。由于编辑部分很累,我想让用户(可能是我)的生活更轻松,这样他就不必等待每个资源的下载。为简单起见,我们在这里忘记了第三个任务。
我的想法是使用线程或多处理模块。一些线程(比如线程 1)会提前进行“下载”,而另一个(比如线程 2)会在已经下载的资源上与用户交互。
问题:如何确保线程 1 始终至少领先于 ahead_min 资源并且最多领先于 ahead_max (ahead_max>ahead_min)?
我通常需要类似于 Queue.Queue(ahead_max) (或 multiprocessing.Queue(ahead_max)) 的东西,除了当达到 ahead_max 时,插入被阻塞,直到队列中最多有 ahead_min 元素(实际上它阻塞直到队列为空,请参阅http://docs.python.org/library/queue.html#module-Queue)。弹出也应该被阻止,直到队列中至少有 ahead_min+1 个元素(在资源序列的末尾,我可以插入一些虚拟对象以确保处理最后一个资源)。
任何的想法?如果您想到任何更简单的替代方案,请分享!