nameko.containers

Attributes

Classes

WorkerContext

工作者上下文

ServiceContainer

服务容器

Functions

get_service_name(service_cls)

获取微服务名称

get_container_cls(→ Union[Type[ServiceContainer], Any])

获取容器类

new_call_id()

Module Contents

nameko.containers._log[源代码]
nameko.containers._log_time[源代码]
nameko.containers.is_method[源代码]
nameko.containers.get_service_name(service_cls: Type)[源代码]

获取微服务名称

nameko.containers.get_container_cls(config: dict) Type[ServiceContainer] | Any[源代码]

获取容器类

nameko.containers.new_call_id()[源代码]
class nameko.containers.WorkerContext(container: ServiceContainer, service: Type, entrypoint: nameko.extensions.Entrypoint, args=None, kwargs=None, data=None)[源代码]

Bases: object

工作者上下文

_call_id = None[源代码]
_call_id_stack = None[源代码]
_parent_call_id_stack = [][源代码]
container[源代码]
config: dict[源代码]
service[源代码]
entrypoint[源代码]
service_name[源代码]
args: Tuple[源代码]
kwargs: Mapping[源代码]
data: dict[源代码]
property call_id_stack[源代码]
property call_id[源代码]
property 调用ID
property context_data[源代码]
property origin_call_id[源代码]
property immediate_parent_call_id[源代码]
__repr__()[源代码]
class nameko.containers.ServiceContainer(service_cls: Type, config: dict)[源代码]

Bases: object

服务容器

service_cls: Type[Any][源代码]
config: Dict[str, Any][源代码]
service_name: str[源代码]
shared_extensions: dict[源代码]
max_workers: int[源代码]
entrypoints[源代码]
dependencies[源代码]
subextensions[源代码]
dependency_attrs: List[Tuple[str, nameko.extensions.DependencyProvider]][源代码]
entrypoints_methods: List[Tuple[str, nameko.extensions.Entrypoint]][源代码]
started = False[源代码]
_worker_pool[源代码]
_worker_threads: Dict[WorkerContext, eventlet.greenthread.GreenThread][源代码]
_managed_threads: Dict[eventlet.greenthread.GreenThread, str | None][源代码]
_being_killed: bool = False[源代码]
_died[源代码]
property extensions[源代码]
property interface[源代码]
一个供扩展使用的此容器的接口。
start()[源代码]

通过启动该容器的所有扩展来启动容器。

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 装饰的服务方法生成一个工作线程。

argskwargs 用作服务方法的参数。

context_data 用于初始化 WorkerContext

handle_result 是一个可选函数,可能由入口点传入。 它在服务方法返回的结果或引发的错误时被调用。 如果提供,则必须返回一个值用于 resultexc_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_setup(worker_ctx)[源代码]

调用提供者的 接口: worker_setup

_worker_result(worker_ctx: WorkerContext, result, exc_info)[源代码]

调用提供者的 接口: worker_result

_worker_teardown(worker_ctx: WorkerContext)[源代码]

调用提供者的 接口: worker_teardown

_kill_worker_threads()[源代码]

终止任何当前正在执行的工作线程。

参见 ServiceContainer.spawn_worker()

_kill_managed_threads()[源代码]

终止任何当前正在执行的托管线程。

参见 ServiceContainer.spawn_managed_thread()

_handle_worker_thread_exited(gt: eventlet.greenthread.GreenThread, worker_ctx: WorkerContext)[源代码]
_handle_managed_thread_exited(gt: eventlet.greenthread.GreenThread, extension: Iterable[nameko.extensions.Extension])[源代码]
_handle_thread_exited(gt: eventlet.greenthread.GreenThread)[源代码]
__repr__()[源代码]