nameko.containers¶
Attributes¶
Classes¶
工作者上下文 |
|
服务容器 |
Functions¶
|
获取微服务名称 |
|
获取容器类 |
Module Contents¶
- nameko.containers.get_container_cls(config: dict) Type[ServiceContainer] | Any [源代码]¶
获取容器类
- class nameko.containers.WorkerContext(container: ServiceContainer, service: Type, entrypoint: nameko.extensions.Entrypoint, args=None, kwargs=None, data=None)[源代码]¶
Bases:
object
工作者上下文
- class nameko.containers.ServiceContainer(service_cls: Type, config: dict)[源代码]¶
Bases:
object
服务容器
- dependency_attrs: List[Tuple[str, nameko.extensions.DependencyProvider]][源代码]¶
- entrypoints_methods: List[Tuple[str, nameko.extensions.Entrypoint]][源代码]¶
- _worker_threads: Dict[WorkerContext, eventlet.greenthread.GreenThread][源代码]¶
- stop()[源代码]¶
优雅地停止容器。
首先,所有入口点都会被要求执行 stop()。这确保不会启动新的工作线程。
当对扩展调用 stop() 时,扩展有责任优雅地关闭,并且只有在它们停止后才返回。
在所有入口点停止后,容器会等待所有活跃的工作线程完成。
在所有活跃的工作线程停止后,容器会停止所有依赖提供者。
此时,应该不再有托管线程。如果仍然有托管线程,它们将被容器终止。
- kill(exc_info=None)[源代码]¶
以半优雅的方式终止容器。
首先终止入口点,然后是任何活跃的工作线程。接下来,终止依赖项。最后,终止任何剩余的托管线程。
如果提供了
exc_info
,异常将由wait()
引发。
- wait()[源代码]¶
阻塞直到容器已停止。
如果容器因异常而停止,
wait()
将引发该异常。在托管线程或工作生命周期(例如在
DependencyProvider.worker_setup()
内部) 中引发的任何未处理异常将导致容器被kill()
,并且在wait()
中引发该异常。
- spawn_worker(entrypoint: nameko.extensions.Entrypoint, args: Iterable, kwargs: dict, context_data: Any | None = None, handle_result: Callable[[WorkerContext, Any, _typeshed.OptExcInfo | None]] | None = None)[源代码]¶
为运行由 entrypoint 装饰的服务方法生成一个工作线程。
args
和kwargs
用作服务方法的参数。context_data
用于初始化WorkerContext
。handle_result
是一个可选函数,可能由入口点传入。 它在服务方法返回的结果或引发的错误时被调用。 如果提供,则必须返回一个值用于result
和exc_info
,以便传播到依赖项; 这些值可能与服务方法返回的值不同。
- spawn_managed_thread(fn: Callable, identifier: str | None = None)[源代码]¶
生成一个托管线程以代表扩展来运行
fn
。 传入的 identifier 将包含在与该线程相关的日志中,默认情况下如果已设置则为 fn.__name__。在
fn
内部引发的任何未捕获错误将导致容器被终止。终止生成的线程的责任在于调用者。 如果在
ServiceContainer.stop()
期间所有扩展停止后它们仍在运行,线程将自动被终止。扩展应该将所有线程生成委托给容器。
- _run_worker(worker_ctx: WorkerContext, handle_result: Callable[[WorkerContext, Any, _typeshed.OptExcInfo | None]] | None)[源代码]¶
- _inject_dependencies(worker_ctx: WorkerContext)[源代码]¶
注入依赖
- _worker_result(worker_ctx: WorkerContext, result, exc_info)[源代码]¶
调用提供者的 接口: worker_result
- _worker_teardown(worker_ctx: WorkerContext)[源代码]¶
调用提供者的 接口: worker_teardown
- _handle_worker_thread_exited(gt: eventlet.greenthread.GreenThread, worker_ctx: WorkerContext)[源代码]¶
- _handle_managed_thread_exited(gt: eventlet.greenthread.GreenThread, extension: Iterable[nameko.extensions.Extension])[源代码]¶