consign.worker.wait#
- consign.worker.wait(task, *, time_out=0.1)[源代码]#
wait阻塞等待一个Task任务完成,并在期间参与工作
wait是Supervisor类的上层封装简单的讲,他的作用就是轮询等待一个
Task当这一个
Task的状态转变为结束后 返回此 Task 的value期间他会将自身代入成为一个
Worker进行loop_work某种程度上看,
wait相当于特别一点的loop_work,主要在于他的WorkArea继承机制由于继承机制,往往你需要明确你的wait工作在哪个区域下?为哪个区域而工作?
wait一个Task时,他会继承Task中的WorkArea并生成对应的CoroutineWorker进行loop_workwait不对 约定的结束信号 做处理 碰到结束信号时他会重新提交回原WorkAreawait轮询的时间是 不精确的 ,受到当前任务量和阻塞时间的影响因为
wait的轮询任务在转移控制权的过程中,队列里依旧存在其余任务你无法保证下一个任务是不是阻塞的
如果存在任务是阻塞的,那么他就有可能对
wait照成影响小技巧
你可以通过创建 充足的线程 以应对这个问题,同时 尽可能的切分函数控制权 提高控制权转换的频率
wait的原理是:wait向此Task类中的WorkArea提交 一个 轮询 任务轮询 任务的作用就是每次执行控制权切换前判断
Task的状态是否是已完成当
wait在接收到Task完成信号后,会在执行完当前手头内容后退出阻塞并返回返回值- 参数
task (Task) – 需要等待的
Task类, 如果传入的对象并非Task类,原样返回time_out –
最短轮询的间隔,他一般用在多线程中,当对应
WorkArea的queue为空时,time_out才会触发警告
尽可能不要设置
time_out为None这或许会导致
wait被阻塞没法正常退出
- 返回
目标
Task中的value