python:如何让线程等待特定的响应?

时间:2010-11-04 10:55:24

标签: python multithreading queue

有人可以提供如何实现以下情况吗?

2个队列 - 目标队列,响应队列
线程从目的地队列中挑选任务 发现需要更多细节 将新任务提交到目标队列
等待他的请求被处理,结果出现在响应队列中 或
监视响应队列以响应他的任务,但实际上没有选择任何响应,以便等待其他响应的其他线程可以使用它?

谢谢

1 个答案:

答案 0 :(得分:1)

如果线程等待特定任务完成,即它不应该选择任何已完成的任务,除了它所放置的任务,您可以使用锁来等待任务:

  def run(self):
    # get a task, do somethings, put a new task
    newTask.waitFor()
    ...

class Task: ... def waitFor(self): self._lock.acquire()

def complete(self): self._lock.release()

def failedToComplete(self, err): self._error = err self._lock.release()

这将有助于避免time.sleep() - s响应队列监控。这里应考虑任务完成错误处理。但这种情况并不常见。是一些特定的算法,其中放置新任务的线程应该等待它吗?即便如此,您可以将该逻辑实现到Task类中,而不是在处理它的线程中。为什么线程从目标队列中选择一个任务并将新任务放回目标队列?如果您有n个处理步骤,则可以使用n个队列。一组线程服务于第一个队列,获取任务,处理它,将结果(新任务)放入下一个队列。最终响应处理程序线程组获得响应并将其发送回客户端。任务封装了与自身有关的细节,线程不区分任务与其他任务。并且不需要等待特定任务。