asleep#
- consign.utils.sleep.asleep(secs: float)[源代码]#
协程的sleep函数,休眠一定时间
asleep
与sleep
不同,asleep
是非阻塞的、协程的asleep
通过 不断的切换控制权 和 判断时间 来实现休眠警告
asleep
无法保证执行顺序因为控制权无法保证谁先获取
举例1和2函数抛出了委托sleep,同时sleep 5秒
在5秒后,无法保证是1先于2获取到执行的控制权
asleep
休眠的时长是 不精确的 ,受到当前任务量和阻塞时间的影响因为
asleep
在转移控制权的过程中,队列里依旧存在其余任务你无法保证下一个任务是不是阻塞的
如果存在任务是阻塞的,那么他就有可能对
asleep
照成影响小技巧
你可以通过创建 充足的线程 以应对这个问题,同时 尽可能的切分函数控制权 提高控制权转换的频率
例子
举例: 1函数在第一次抛出
asleep
5秒,但2函数抛出一个需要 阻塞执行7秒 的 非协程 任务假设在单/主线程下执行
那么2函数的任务阻塞时间大于>5秒, 且没有控制权的转移
因而,1函数无法在sleep 5秒后得到立即执行,
asleep
为了方便使用,已经被chain_reaction
和repeated_call
修饰二者分别使得
asleep
以顺序方式执行、asleep
以有参的形式可以再被无参调用执行- 参数
secs (float) – 休眠的秒数