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_work
wait
不对 约定的结束信号 做处理 碰到结束信号时他会重新提交回原WorkArea
wait
轮询的时间是 不精确的 ,受到当前任务量和阻塞时间的影响因为
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