CoroutineWorker#
- class consign.worker.coroutineworker.CoroutineWorker(work_area_name: str = 'DEFAULT_WORK_AREA', *, work_area=None)[源代码]#
基类:
object
CoroutineWorker协程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
会通过名字获取对应的WorkArea
work_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()