1
0
forked from bot/app

📝 文档初步大迁移 vuepress -> vitepress

This commit is contained in:
远野千束 2024-08-31 19:51:34 +08:00
parent 2f87b06c83
commit 9aade6599c
7 changed files with 103 additions and 141 deletions

View File

@ -8,7 +8,7 @@ import threading
import time import time
from typing import Any, Optional from typing import Any, Optional
from liteyuki.bot.lifespan import (LIFESPAN_FUNC, Lifespan) from liteyuki.bot.lifespan import (LIFESPAN_FUNC, Lifespan, PROCESS_LIFESPAN_FUNC)
from liteyuki.comm.channel import get_channel from liteyuki.comm.channel import get_channel
from liteyuki.core.manager import ProcessManager from liteyuki.core.manager import ProcessManager
from liteyuki.log import init_log, logger from liteyuki.log import init_log, logger
@ -24,13 +24,11 @@ __all__ = [
class LiteyukiBot: class LiteyukiBot:
def __init__(self, *args, **kwargs) -> None: def __init__(self, **kwargs) -> None:
""" """
初始化轻雪实例 初始化轻雪实例
Args: Args:
*args:
**kwargs: 配置 **kwargs: 配置
""" """
"""常规操作""" """常规操作"""
print_logo() print_logo()
@ -83,8 +81,6 @@ class LiteyukiBot:
async def keep_alive(self): async def keep_alive(self):
""" """
保持轻雪运行 保持轻雪运行
Returns:
""" """
try: try:
while not self.stop_event.is_set(): while not self.stop_event.is_set():
@ -95,13 +91,12 @@ class LiteyukiBot:
def _handle_exit(self, signum, frame): def _handle_exit(self, signum, frame):
""" """
@litedoc-hide
信号处理 信号处理
Args: Args:
signum: signum: 信号
frame: frame:
Returns:
""" """
logger.info("Received signal, stopping all processes.") logger.info("Received signal, stopping all processes.")
self.stop() self.stop()
@ -110,8 +105,8 @@ class LiteyukiBot:
def restart(self, delay: int = 0): def restart(self, delay: int = 0):
""" """
重启轻雪本体 重启轻雪本体
Returns: Args:
delay ([`int`](https%3A//docs.python.org/3/library/functions.html#int), optional): 延迟重启时间. Defaults to 0.
""" """
if self.call_restart_count < 1: if self.call_restart_count < 1:
executable = sys.executable executable = sys.executable
@ -136,7 +131,7 @@ class LiteyukiBot:
""" """
停止轻雪 停止轻雪
Args: Args:
name: 进程名称, 默认为None, 所有进程 name ([`Optional`](https%3A//docs.python.org/3/library/typing.html#typing.Optional)[[`str`](https%3A//docs.python.org/3/library/stdtypes.html#str)]): 进程名. Defaults to None.
Returns: Returns:
""" """
if name is not None: if name is not None:
@ -150,32 +145,32 @@ class LiteyukiBot:
def init(self, *args, **kwargs): def init(self, *args, **kwargs):
""" """
初始化轻雪, 自动调用 初始化轻雪, 自动调用
Returns: Args:
*args: 参数
**kwargs: 关键字参数
""" """
self.init_logger() self.init_logger()
def init_logger(self): def init_logger(self):
# 修改nonebot的日志配置 """
初始化日志
"""
init_log(config=self.config) init_log(config=self.config)
def stop(self): def stop(self):
""" """
停止轻雪 停止轻雪
Returns:
""" """
self.stop_event.set() self.stop_event.set()
self.loop.stop() self.loop.stop()
def on_before_start(self, func: LIFESPAN_FUNC): def on_before_start(self, func: LIFESPAN_FUNC) -> LIFESPAN_FUNC:
""" """
注册启动前的函数 注册启动前的函数
Args: Args:
func: func ([`LIFESPAN_FUNC`](./lifespan#var-lifespan-func)): 生命周期函数
Returns: Returns:
[`LIFESPAN_FUNC`](./lifespan#var-lifespan-func): 生命周期函数
""" """
return self.lifespan.on_before_start(func) return self.lifespan.on_before_start(func)
@ -183,10 +178,9 @@ class LiteyukiBot:
""" """
注册启动后的函数 注册启动后的函数
Args: Args:
func: func ([`LIFESPAN_FUNC`](./lifespan#var-lifespan-func)): 生命周期函数
Returns: Returns:
[`LIFESPAN_FUNC`](./lifespan#var-lifespan-func): 生命周期函数
""" """
return self.lifespan.on_after_start(func) return self.lifespan.on_after_start(func)
@ -194,32 +188,29 @@ class LiteyukiBot:
""" """
注册停止后的函数未实现 注册停止后的函数未实现
Args: Args:
func: func ([`LIFESPAN_FUNC`](./lifespan#var-lifespan-func)): 生命周期函数
Returns: Returns:
[`LIFESPAN_FUNC`](./lifespan#var-lifespan-func): 生命周期函数
""" """
return self.lifespan.on_after_shutdown(func) return self.lifespan.on_after_shutdown(func)
def on_before_process_shutdown(self, func: LIFESPAN_FUNC): def on_before_process_shutdown(self, func: PROCESS_LIFESPAN_FUNC):
""" """
注册进程停止前的函数为子进程停止时调用 注册进程停止前的函数为子进程停止时调用
Args: Args:
func: func ([`PROCESS_LIFESPAN_FUNC`](./lifespan#var-process-lifespan-func)): 生命周期函数
Returns: Returns:
[`PROCESS_LIFESPAN_FUNC`](./lifespan#var-process-lifespan-func): 生命周期函数
""" """
return self.lifespan.on_before_process_shutdown(func) return self.lifespan.on_before_process_shutdown(func)
def on_before_process_restart(self, func: LIFESPAN_FUNC): def on_before_process_restart(self, func: PROCESS_LIFESPAN_FUNC) -> PROCESS_LIFESPAN_FUNC:
""" """
注册进程重启前的函数为子进程重启时调用 注册进程重启前的函数为子进程重启时调用
Args: Args:
func: func ([`PROCESS_LIFESPAN_FUNC`](./lifespan#var-process-lifespan-func)): 生命周期函数
Returns: Returns:
[`PROCESS_LIFESPAN_FUNC`](./lifespan#var-process-lifespan-func): 生命周期函数
""" """
return self.lifespan.on_before_process_restart(func) return self.lifespan.on_before_process_restart(func)
@ -228,10 +219,9 @@ class LiteyukiBot:
""" """
注册重启后的函数未实现 注册重启后的函数未实现
Args: Args:
func: func ([`LIFESPAN_FUNC`](./lifespan#var-lifespan-func)): 生命周期函数
Returns: Returns:
[`LIFESPAN_FUNC`](./lifespan#var-lifespan-func): 生命周期函数
""" """
return self.lifespan.on_after_restart(func) return self.lifespan.on_after_restart(func)
@ -242,9 +232,8 @@ _BOT_INSTANCE: LiteyukiBot
def get_bot() -> LiteyukiBot: def get_bot() -> LiteyukiBot:
""" """
获取轻雪实例 获取轻雪实例
Returns: Returns:
LiteyukiBot: 当前的轻雪实例 [`LiteyukiBot`](#class-liteyukibot): 轻雪实例
""" """
if IS_MAIN_PROCESS: if IS_MAIN_PROCESS:
@ -259,11 +248,10 @@ def get_config(key: str, default: Any = None) -> Any:
""" """
获取配置 获取配置
Args: Args:
key: 配置键 key ([`str`](https%3A//docs.python.org/3/library/stdtypes.html#str)): 配置键
default: 默认值 default ([`Any`](https%3A//docs.python.org/3/library/functions.html#any), optional): 默认值. Defaults to None.
Returns: Returns:
Any: 配置值 [`Any`](https%3A//docs.python.org/3/library/functions.html#any): 配置值
""" """
return get_bot().config.get(key, default) return get_bot().config.get(key, default)
@ -272,12 +260,12 @@ def get_config_with_compat(key: str, compat_keys: tuple[str], default: Any = Non
""" """
获取配置兼容旧版本 获取配置兼容旧版本
Args: Args:
key: 配置键 key ([`str`](https%3A//docs.python.org/3/library/stdtypes.html#str)): 配置键
compat_keys: 兼容键 compat_keys ([`tuple`](https%3A//docs.python.org/3/library/stdtypes.html#tuple)[`str`](https%3A//docs.python.org/3/library/stdtypes.html#str)): 兼容键
default: 默认值 default ([`Any`](https%3A//docs.python.org/3/library/functions.html#any), optional): 默认值. Defaults to None.
Returns: Returns:
Any: 配置值 [`Any`](https%3A//docs.python.org/3/library/functions.html#any): 配置值
""" """
if key in get_bot().config: if key in get_bot().config:
return get_bot().config[key] return get_bot().config[key]
@ -289,6 +277,7 @@ def get_config_with_compat(key: str, compat_keys: tuple[str], default: Any = Non
def print_logo(): def print_logo():
"""@litedoc-hide"""
print("\033[34m" + r""" print("\033[34m" + r"""
__ ______ ________ ________ __ __ __ __ __ __ ______ __ ______ ________ ________ __ __ __ __ __ __ ______
/ | / |/ |/ |/ \ / |/ | / |/ | / |/ | / | / |/ |/ |/ \ / |/ | / |/ | / |/ |

View File

@ -9,18 +9,18 @@ Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
@Software: PyCharm @Software: PyCharm
""" """
import asyncio import asyncio
from typing import Any, Awaitable, Callable, TypeAlias from typing import Any, Awaitable, Callable, TypeAlias, Sequence
from liteyuki.log import logger from liteyuki.log import logger
from liteyuki.utils import is_coroutine_callable, async_wrapper from liteyuki.utils import is_coroutine_callable, async_wrapper
SYNC_LIFESPAN_FUNC: TypeAlias = Callable[[], Any] SYNC_LIFESPAN_FUNC: TypeAlias = Callable[[], Any] # 同步生命周期函数
ASYNC_LIFESPAN_FUNC: TypeAlias = Callable[[], Awaitable[Any]] ASYNC_LIFESPAN_FUNC: TypeAlias = Callable[[], Awaitable[Any]] # 异步生命周期函数
LIFESPAN_FUNC: TypeAlias = SYNC_LIFESPAN_FUNC | ASYNC_LIFESPAN_FUNC LIFESPAN_FUNC: TypeAlias = SYNC_LIFESPAN_FUNC | ASYNC_LIFESPAN_FUNC # 生命周期函数
SYNC_PROCESS_LIFESPAN_FUNC: TypeAlias = Callable[[str], Any] SYNC_PROCESS_LIFESPAN_FUNC: TypeAlias = Callable[[str], Any] # 同步进程生命周期函数
ASYNC_PROCESS_LIFESPAN_FUNC: TypeAlias = Callable[[str], Awaitable[Any]] ASYNC_PROCESS_LIFESPAN_FUNC: TypeAlias = Callable[[str], Awaitable[Any]] # 异步进程生命周期函数
PROCESS_LIFESPAN_FUNC: TypeAlias = SYNC_PROCESS_LIFESPAN_FUNC | ASYNC_PROCESS_LIFESPAN_FUNC PROCESS_LIFESPAN_FUNC: TypeAlias = SYNC_PROCESS_LIFESPAN_FUNC | ASYNC_PROCESS_LIFESPAN_FUNC # 进程函数
class Lifespan: class Lifespan:
@ -33,21 +33,20 @@ class Lifespan:
self._before_start_funcs: list[LIFESPAN_FUNC] = [] self._before_start_funcs: list[LIFESPAN_FUNC] = []
self._after_start_funcs: list[LIFESPAN_FUNC] = [] self._after_start_funcs: list[LIFESPAN_FUNC] = []
self._before_process_shutdown_funcs: list[LIFESPAN_FUNC] = [] self._before_process_shutdown_funcs: list[PROCESS_LIFESPAN_FUNC] = []
self._after_shutdown_funcs: list[LIFESPAN_FUNC] = [] self._after_shutdown_funcs: list[LIFESPAN_FUNC] = []
self._before_process_restart_funcs: list[LIFESPAN_FUNC] = [] self._before_process_restart_funcs: list[PROCESS_LIFESPAN_FUNC] = []
self._after_restart_funcs: list[LIFESPAN_FUNC] = [] self._after_restart_funcs: list[LIFESPAN_FUNC] = []
@staticmethod @staticmethod
async def run_funcs(funcs: list[ASYNC_LIFESPAN_FUNC | PROCESS_LIFESPAN_FUNC], *args, **kwargs) -> None: async def run_funcs(funcs: Sequence[LIFESPAN_FUNC | PROCESS_LIFESPAN_FUNC], *args, **kwargs) -> None:
""" """
并发运行异步函数 并发运行异步函数
Args: Args:
funcs: funcs ([`Sequence`](https%3A//docs.python.org/3/library/typing.html#typing.Sequence)[[`ASYNC_LIFESPAN_FUNC`](#var-lifespan-func) | [`PROCESS_LIFESPAN_FUNC`](#var-process-lifespan-func)]): 函数列表
Returns: Returns:
""" """
loop = asyncio.get_running_loop()
tasks = [func(*args, **kwargs) if is_coroutine_callable(func) else async_wrapper(func)(*args, **kwargs) for func in funcs] tasks = [func(*args, **kwargs) if is_coroutine_callable(func) else async_wrapper(func)(*args, **kwargs) for func in funcs]
await asyncio.gather(*tasks) await asyncio.gather(*tasks)
@ -55,9 +54,9 @@ class Lifespan:
""" """
注册启动时的函数 注册启动时的函数
Args: Args:
func: func ([`LIFESPAN_FUNC`](#var-lifespan-func)): 生命周期函数
Returns: Returns:
LIFESPAN_FUNC: [`LIFESPAN_FUNC`](#var-lifespan-func): 生命周期函数
""" """
self._before_start_funcs.append(func) self._before_start_funcs.append(func)
return func return func
@ -66,20 +65,20 @@ class Lifespan:
""" """
注册启动时的函数 注册启动时的函数
Args: Args:
func: func ([`LIFESPAN_FUNC`](#var-lifespan-func)): 生命周期函数
Returns: Returns:
LIFESPAN_FUNC: [`LIFESPAN_FUNC`](#var-lifespan-func): 生命周期函数
""" """
self._after_start_funcs.append(func) self._after_start_funcs.append(func)
return func return func
def on_before_process_shutdown(self, func: LIFESPAN_FUNC) -> LIFESPAN_FUNC: def on_before_process_shutdown(self, func: PROCESS_LIFESPAN_FUNC) -> PROCESS_LIFESPAN_FUNC:
""" """
注册停止前的函数 注册进程停止前的函数
Args: Args:
func: func ([`PROCESS_LIFESPAN_FUNC`](#var-process-lifespan-func)): 进程生命周期函数
Returns: Returns:
LIFESPAN_FUNC: [`PROCESS_LIFESPAN_FUNC`](#var-process-lifespan-func): 进程生命周期函数
""" """
self._before_process_shutdown_funcs.append(func) self._before_process_shutdown_funcs.append(func)
return func return func
@ -88,22 +87,20 @@ class Lifespan:
""" """
注册停止后的函数 注册停止后的函数
Args: Args:
func: func ([`LIFESPAN_FUNC`](#var-lifespan-func)): 生命周期函数
Returns: Returns:
LIFESPAN_FUNC: [`LIFESPAN_FUNC`](#var-lifespan-func): 生命周期函数
""" """
self._after_shutdown_funcs.append(func) self._after_shutdown_funcs.append(func)
return func return func
def on_before_process_restart(self, func: LIFESPAN_FUNC) -> LIFESPAN_FUNC: def on_before_process_restart(self, func: PROCESS_LIFESPAN_FUNC) -> PROCESS_LIFESPAN_FUNC:
""" """
注册重启时的函数 注册进程重启前的函数
Args: Args:
func: func ([`PROCESS_LIFESPAN_FUNC`](#var-process-lifespan-func)): 进程生命周期函数
Returns: Returns:
LIFESPAN_FUNC: [`PROCESS_LIFESPAN_FUNC`](#var-process-lifespan-func): 进程生命周期函数
""" """
self._before_process_restart_funcs.append(func) self._before_process_restart_funcs.append(func)
return func return func
@ -112,58 +109,51 @@ class Lifespan:
""" """
注册重启后的函数 注册重启后的函数
Args: Args:
func: func ([`LIFESPAN_FUNC`](#var-lifespan-func)): 生命周期函数
Returns: Returns:
LIFESPAN_FUNC: [`LIFESPAN_FUNC`](#var-lifespan-func): 生命周期函数
""" """
self._after_restart_funcs.append(func) self._after_restart_funcs.append(func)
return func return func
async def before_start(self) -> None: async def before_start(self) -> None:
""" """
启动前 启动前钩子
Returns:
""" """
logger.debug("Running before_start functions") logger.debug("Running before_start functions")
await self.run_funcs(self._before_start_funcs) await self.run_funcs(self._before_start_funcs)
async def after_start(self) -> None: async def after_start(self) -> None:
""" """
启动后 启动后钩子
Returns:
""" """
logger.debug("Running after_start functions") logger.debug("Running after_start functions")
await self.run_funcs(self._after_start_funcs) await self.run_funcs(self._after_start_funcs)
async def before_process_shutdown(self) -> None: async def before_process_shutdown(self) -> None:
""" """
停止前 停止前钩子
Returns:
""" """
logger.debug("Running before_shutdown functions") logger.debug("Running before_shutdown functions")
await self.run_funcs(self._before_process_shutdown_funcs) await self.run_funcs(self._before_process_shutdown_funcs)
async def after_shutdown(self) -> None: async def after_shutdown(self) -> None:
""" """
停止后 停止后钩子 未实现
Returns:
""" """
logger.debug("Running after_shutdown functions") logger.debug("Running after_shutdown functions")
await self.run_funcs(self._after_shutdown_funcs) await self.run_funcs(self._after_shutdown_funcs)
async def before_process_restart(self) -> None: async def before_process_restart(self) -> None:
""" """
重启前 重启前钩子
Returns:
""" """
logger.debug("Running before_restart functions") logger.debug("Running before_restart functions")
await self.run_funcs(self._before_process_restart_funcs) await self.run_funcs(self._before_process_restart_funcs)
async def after_restart(self) -> None: async def after_restart(self) -> None:
""" """
重启后 重启后钩子 未实现
Returns:
""" """
logger.debug("Running after_restart functions") logger.debug("Running after_restart functions")
await self.run_funcs(self._after_restart_funcs) await self.run_funcs(self._after_restart_funcs)

View File

@ -1,13 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
@Time : 2024/7/26 下午11:21
@Author : snowykami
@Email : snowykami@outlook.com
@File : channel_.py
@Software: PyCharm
本模块定义了一个通用的通道类用于进程间通信 本模块定义了一个通用的通道类用于进程间通信
""" """
import asyncio import asyncio
@ -19,13 +11,13 @@ from liteyuki.utils import IS_MAIN_PROCESS, is_coroutine_callable
T = TypeVar("T") T = TypeVar("T")
SYNC_ON_RECEIVE_FUNC: TypeAlias = Callable[[T], Any] SYNC_ON_RECEIVE_FUNC: TypeAlias = Callable[[T], Any] # 同步接收函数
ASYNC_ON_RECEIVE_FUNC: TypeAlias = Callable[[T], Coroutine[Any, Any, Any]] ASYNC_ON_RECEIVE_FUNC: TypeAlias = Callable[[T], Coroutine[Any, Any, Any]] # 异步接收函数
ON_RECEIVE_FUNC: TypeAlias = SYNC_ON_RECEIVE_FUNC | ASYNC_ON_RECEIVE_FUNC ON_RECEIVE_FUNC: TypeAlias = SYNC_ON_RECEIVE_FUNC | ASYNC_ON_RECEIVE_FUNC # 接收函数
SYNC_FILTER_FUNC: TypeAlias = Callable[[T], bool] SYNC_FILTER_FUNC: TypeAlias = Callable[[T], bool] # 同步过滤函数
ASYNC_FILTER_FUNC: TypeAlias = Callable[[T], Coroutine[Any, Any, bool]] ASYNC_FILTER_FUNC: TypeAlias = Callable[[T], Coroutine[Any, Any, bool]] # 异步过滤函数
FILTER_FUNC: TypeAlias = SYNC_FILTER_FUNC | ASYNC_FILTER_FUNC FILTER_FUNC: TypeAlias = SYNC_FILTER_FUNC | ASYNC_FILTER_FUNC # 过滤函数
_func_id: int = 0 _func_id: int = 0
_channel: dict[str, "Channel"] = {} _channel: dict[str, "Channel"] = {}
@ -77,7 +69,6 @@ class Channel(Generic[T]):
def _get_generic_type(self) -> Optional[type]: def _get_generic_type(self) -> Optional[type]:
""" """
获取通道传递泛型类型 获取通道传递泛型类型
Returns: Returns:
Optional[type]: 泛型类型 Optional[type]: 泛型类型
""" """
@ -91,7 +82,6 @@ class Channel(Generic[T]):
Args: Args:
data: 数据 data: 数据
structure: 结构 structure: 结构
Returns: Returns:
bool: 是否通过验证 bool: 是否通过验证
""" """
@ -118,7 +108,7 @@ class Channel(Generic[T]):
""" """
发送数据发送函数为同步函数没有异步的必要 发送数据发送函数为同步函数没有异步的必要
Args: Args:
data: 数据 data (T): 数据
""" """
if self.type_check: if self.type_check:
_type = self._get_generic_type() _type = self._get_generic_type()
@ -132,7 +122,8 @@ class Channel(Generic[T]):
def receive(self) -> T: def receive(self) -> T:
""" """
同步接收数据会阻塞线程 同步接收数据会阻塞线程
Args: Returns:
T: 数据
""" """
if self._closed: if self._closed:
raise RuntimeError("Cannot receive from a closed channel_") raise RuntimeError("Cannot receive from a closed channel_")
@ -144,6 +135,8 @@ class Channel(Generic[T]):
async def async_receive(self) -> T: async def async_receive(self) -> T:
""" """
异步接收数据会挂起等待 异步接收数据会挂起等待
Returns:
T: 数据
""" """
print("等待接收数据") print("等待接收数据")
loop = asyncio.get_running_loop() loop = asyncio.get_running_loop()
@ -155,9 +148,9 @@ class Channel(Generic[T]):
""" """
接收数据并执行函数 接收数据并执行函数
Args: Args:
filter_func: 过滤函数为None则不过滤 filter_func ([`Optional`](https%3A//docs.python.org/3/library/typing.html#typing.Optional)[[`FILTER_FUNC`](#var-FILTER_FUNC)], optional): 过滤函数. Defaults to None.
Returns: Returns:
装饰器装饰一个函数在接收到数据后执行 Callable[[Callable[[T], Any]], Callable[[T], Any]]: 装饰器
""" """
if not IS_MAIN_PROCESS: if not IS_MAIN_PROCESS:
raise RuntimeError("on_receive can only be used in main process") raise RuntimeError("on_receive can only be used in main process")
@ -202,6 +195,7 @@ class Channel(Generic[T]):
async def start_receive_loop(self): async def start_receive_loop(self):
""" """
@litedoc-hide
开始接收数据 开始接收数据
会自动判断主进程和子进程需要在对应进程都调度一次 会自动判断主进程和子进程需要在对应进程都调度一次
""" """
@ -217,16 +211,16 @@ class Channel(Generic[T]):
"""子进程可用的主动和被动通道""" """子进程可用的主动和被动通道"""
active_channel: Channel = Channel(name="active_channel") active_channel: Channel = Channel(name="active_channel") # 主动通道
passive_channel: Channel = Channel(name="passive_channel") passive_channel: Channel = Channel(name="passive_channel") # 被动通道
publish_channel: Channel[tuple[str, dict[str, Any]]] = Channel(name="publish_channel") publish_channel: Channel[tuple[str, dict[str, Any]]] = Channel(name="publish_channel") # 发布通道
"""通道传递通道,主进程创建单例,子进程初始化时实例化""" """通道传递通道,主进程创建单例,子进程初始化时实例化"""
channel_deliver_active_channel: Channel[Channel[Any]] channel_deliver_active_channel: Channel[Channel[Any]] # 主动通道传递通道
channel_deliver_passive_channel: Channel[tuple[str, dict[str, Any]]] channel_deliver_passive_channel: Channel[tuple[str, dict[str, Any]]] # 被动通道传递通道
if IS_MAIN_PROCESS: if IS_MAIN_PROCESS:
channel_deliver_active_channel = Channel(name="channel_deliver_active_channel") channel_deliver_active_channel = Channel(name="channel_deliver_active_channel") # 主动通道传递通道
channel_deliver_passive_channel = Channel(name="channel_deliver_passive_channel") channel_deliver_passive_channel = Channel(name="channel_deliver_passive_channel") # 被动通道传递通道
@channel_deliver_passive_channel.on_receive(filter_func=lambda data: data[0] == "set_channel") @channel_deliver_passive_channel.on_receive(filter_func=lambda data: data[0] == "set_channel")
@ -251,8 +245,8 @@ def set_channel(name: str, channel: "Channel"):
""" """
设置通道实例 设置通道实例
Args: Args:
name: 通道名称 name ([`str`](https%3A//docs.python.org/3/library/stdtypes.html#str)): 通道名称
channel: 通道实例 channel ([`Channel`](#class-channel-generic-t)): 通道实例
""" """
if not isinstance(channel, Channel): if not isinstance(channel, Channel):
raise TypeError(f"channel_ must be an instance of Channel, {type(channel)} found") raise TypeError(f"channel_ must be an instance of Channel, {type(channel)} found")
@ -277,7 +271,7 @@ def set_channels(channels: dict[str, "Channel"]):
""" """
设置通道实例 设置通道实例
Args: Args:
channels: 通道名称 channels ([`dict`](https%3A//docs.python.org/3/library/stdtypes.html#dict)[[`str`](https%3A//docs.python.org/3/library/stdtypes.html#str), [`Channel`](#class-channel-generic-t)]): 通道实例
""" """
for name, channel in channels.items(): for name, channel in channels.items():
set_channel(name, channel) set_channel(name, channel)
@ -287,8 +281,9 @@ def get_channel(name: str) -> "Channel":
""" """
获取通道实例 获取通道实例
Args: Args:
name: 通道名称 name ([`str`](https%3A//docs.python.org/3/library/stdtypes.html#str)): 通道名称
Returns: Returns:
[`Channel`](#class-channel-generic-t): 通道实例
""" """
if IS_MAIN_PROCESS: if IS_MAIN_PROCESS:
return _channel[name] return _channel[name]
@ -309,8 +304,9 @@ def get_channel(name: str) -> "Channel":
def get_channels() -> dict[str, "Channel"]: def get_channels() -> dict[str, "Channel"]:
""" """
获取通道实例 获取通道实例
Returns: Returns:
[`dict`](https%3A//docs.python.org/3/library/stdtypes.html#dict)[[`str`](https%3A//docs.python.org/3/library/stdtypes.html#str), [`Channel`](#class-channel-generic-t)]: 通道实例
""" """
if IS_MAIN_PROCESS: if IS_MAIN_PROCESS:
return _channel return _channel

View File

@ -1,12 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved 本模块用于轻雪主进程和子进程之间的通信的事件类
@Time : 2024/7/26 下午10:47
@Author : snowykami
@Email : snowykami@outlook.com
@File : event.py
@Software: PyCharm
""" """
from typing import Any from typing import Any

View File

@ -1,12 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved 基于socket的通道
@Time : 2024/8/25 下午3:54
@Author : snowykami
@Email : snowykami@outlook.com
@File : channelv2.py
@Software: PyCharm
""" """

View File

@ -234,7 +234,7 @@ class GlobalKeyValueStore:
return cls._instance return cls._instance
shared_memory: KeyValueStore = GlobalKeyValueStore.get_instance() shared_memory: KeyValueStore = GlobalKeyValueStore.get_instance() # 共享内存对象
# 全局单例访问点 # 全局单例访问点
if IS_MAIN_PROCESS: if IS_MAIN_PROCESS:

View File

@ -21,7 +21,6 @@ def debounce(wait):
""" """
防抖函数 防抖函数
""" """
def decorator(func): def decorator(func):
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
nonlocal last_call_time nonlocal last_call_time