wait#

consign.wait(task, *, time_out=0.1)[源代码]#

wait阻塞等待一个Task任务完成,并在期间参与工作

waitSupervisor 类的上层封装

简单的讲,他的作用就是轮询等待一个 Task

当这一个 Task 的状态转变为结束后 返回此 Task 的value

期间他会将自身代入成为一个 Worker 进行 loop_work

某种程度上看,wait 相当于特别一点的 loop_work ,主要在于他的 WorkArea 继承机制

由于继承机制,往往你需要明确你的wait工作在哪个区域下?为哪个区域而工作?

wait 一个 Task 时,他会继承 Task 中的 WorkArea 并生成对应的 CoroutineWorker 进行 loop_work

wait 不对 约定的结束信号 做处理 碰到结束信号时他会重新提交回原 WorkArea

wait 轮询的时间是 不精确的 ,受到当前任务量和阻塞时间的影响

因为 wait 的轮询任务在转移控制权的过程中,队列里依旧存在其余任务

你无法保证下一个任务是不是阻塞的

如果存在任务是阻塞的,那么他就有可能对 wait 照成影响

小技巧

你可以通过创建 充足的线程 以应对这个问题,同时 尽可能的切分函数控制权 提高控制权转换的频率

wait 的原理是: wait 向此 Task 类中的 WorkArea 提交 一个 轮询 任务

轮询 任务的作用就是每次执行控制权切换前判断 Task 的状态是否是已完成

wait 在接收到 Task 完成信号后,会在执行完当前手头内容后退出阻塞并返回返回值

参数
  • task (Task) – 需要等待的 Task 类, 如果传入的对象并非 Task 类,原样返回

  • time_out

    最短轮询的间隔,他一般用在多线程中,当对应 WorkAreaqueue 为空时,time_out 才会触发

    警告

    尽可能不要设置 time_outNone

    这或许会导致 wait 被阻塞没法正常退出

返回

目标 Task 中的 value