CoroutineWorker#
- class consign.worker.CoroutineWorker(work_area_name: str = 'DEFAULT_WORK_AREA', *, work_area=None)[源代码]#
基类:
objectCoroutineWorker协程Worker,CoroutineWorker能够以并发的方式执行特定的协程函数,是所有Worker的基石
CoroutineWorker可以将 控制权切换以实现并发的效果CoroutineWorker的使用方法通常是loop_work阻塞并完成当前队列中的全部内容如果你使用
CoroutineWorker在多线程/进程环境下,那么loop_work(forever=False)在切换很快时是不可信的这是由于队列qsize不确定性 以及框架的获取提交导致的
小技巧
通常在多线程下使用
loop_work(forever=True)或者重复while True使用loop_work(forever=False)loop_work会把当前线程 阻塞 并作为一个 临时的worker 去工作
使用的是 当前进程 去工作,是 单线程 的,所以任何阻塞的函数都会导致阻塞。
例子
some_coroutine() cw = CoroutineWorker() cw.loop_work()
- 参数
work_area_name (str) –
WorkArea的名字,CoroutineWorker会通过名字获取对应的WorkAreawork_area (WorkArea) –
work_area是显式参数,需要显式调用
可以直接指定
WorkArea,如果直接指定,会跳过work_area_name的查找过程
- 抛出
AssertionError – 当传入参数
work_area_name无法被找到时抛出
Methods Summary
loop_work(*[, time_out, forever])loop_work阻塞并完成当前队列中的全部内容 或者 收到停止信号qsize()获得
WorkArea队列中的大概数量submit_work(*args)提交任务到
WorkArea队列work_once([time_out])CoroutineWorker获取一次WorkArea队列中的内容并执行一次Methods Documentation
- loop_work(*, time_out=0.1, forever=True)[源代码]#
loop_work阻塞并完成当前队列中的全部内容 或者 收到停止信号警告
在多线程/进程环境下
forever参数为False时需要考虑 队列qsize的不确定性
小技巧
通常在多线程下使用
loop_work(forever=True)或者重复while True使用loop_work(forever=False)- 参数
time_out – 等待
WorkArea队列获取内容的等待超时时长forever –
是否永久阻塞
如果
forever为False,那么loop_work会考虑队列的qsize是否<=0如果队列的
qsize<=0,那么退出循环如果你需要指定某个任务完成并阻塞,那么建议使用
wait来确保完成优于直接使用forever=True
- 返回
None
- 抛出
ValueError – 当参数
time_out不正确时抛出
- qsize()[源代码]#
获得
WorkArea队列中的大概数量警告
由于多线程或者多进程的上下文,这个数字是不可靠的。
请注意,这可能会在Unix平台上引起 NotImplementedError ,如 macOS ,因为其上没有实现 sem_getvalue() 。
- 返回
获得
WorkArea队列中的大概数量- 抛出
NotImplementedError – 能会在Unix平台上引起 NotImplementedError ,如 macOS ,因为其上没有实现 sem_getvalue()