【问题标题】:python: how to make threads wait for specific response?python:如何让线程等待特定的响应?
【发布时间】:2010-11-04 10:55:24
【问题描述】:

谁能提供如何实现以下场景?

2 个队列 - 目标队列、响应队列
线程从目标队列中提取任务
了解需求详情
向目标队列提交新任务
等待他的请求被处理并且结果出现在响应队列中

监视响应队列以响应他的任务,但实际上并没有选择任何响应,因此它可用于等待其他响应的其他线程?

谢谢你

【问题讨论】:

    标签: python multithreading queue


    【解决方案1】:

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

    定义运行(自我): # 得到一个任务,做一些事情,放一个新任务 新任务.waitFor() ...

    类任务: ... 定义等待(自我): self._lock.acquire()

    定义完成(自我): self._lock.release()

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

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

    【讨论】:

    • 让我提供更多细节。有 2 对目标和响应队列,以及 2 组线程。一个负责检索数据,另一个负责处理数据,但可能存在处理组中的线程可能需要更多数据才能完成其任务的情况。因此,它将请求放入数据目标队列,并且必须获得正确的响应,否则将无法正确处理它。必须限制对数据源的访问,因此处理线程无法自行获取额外数据。有意义吗?
    • @m1k3y02 是的,谢谢。在这种情况下,您应该实现一些 waitFor 方法来锁定并等待数据,并且处理线程应该在将任务放回目标队列后调用该方法。虽然我不清楚为什么不将处理分为两个步骤:1. 获取任务,做某事,如果需要额外的数据,则放入数据收集队列,否则响应。 2.另外一个线程监听datagatheringqueue,处理任务,放入responsequeue。但你可能知道原因。
    • 实际上我正在考虑为 1 个任务打开 1 个线程,另一方面拆分它可能更合理。谢谢:-)
    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多