Python: 如何让线程等待特定响应?
有没有人能告诉我怎么实现下面的场景呢?
有两个队列 - 目标队列和响应队列
一个线程从目标队列中取出任务
发现需要更多的信息
于是把新的任务提交到目标队列
然后等待他的请求被处理,结果出现在响应队列中
或者
监控响应队列,看看他的任务有没有回应,但实际上不去取任何回应,这样其他线程在等其他回应的时候也能用到这些回应?
谢谢
1 个回答
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()
。处理任务完成时的错误也要考虑到。不过,这种方法并不常见。难道是某种特定的算法,让放新任务的线程必须等这个任务完成吗?即便如此,你也可以把这个逻辑放在任务类里面,而不是放在处理它的线程里。还有,为什么线程要从目标队列中取出一个任务,然后再把新任务放回目标队列呢?如果你有 n 步处理,可以为每一步使用 n 个队列。一组线程处理第一个队列,获取任务,处理后把结果(一个新任务)放到下一个队列。最后一组处理响应的线程获取响应,并将其发送回客户端。任务本身包含了与它们相关的细节,线程之间并不区分任务。而且也不需要特意等待某个特定的任务。