Name | CheeseSignal JSON |
Version |
1.1.0
JSON |
| download |
home_page | None |
Summary | 一款简约的信号系统。 |
upload_time | 2024-04-22 17:38:16 |
maintainer | None |
docs_url | None |
author | None |
requires_python | None |
license | None |
keywords |
api
backend
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# **CheeseSignal**
一款简单的信号系统。
## **安装**
系统要求:Linux。
Python要求:目前仅保证支持3.11及以上版本的Python,新版本会优先支持Python的最新稳定版本。
```
pip install CheeseSignal
```
## **使用**
使用方式较为简单,通过函数或装饰件连接至某个信号,随后等待信号发送。
```python
import time
from CheeseSignal import signal
signal = Signal()
def receiver1(*args, **kwargs):
print(arg, kwargs)
signal.connect(receiver1)
@signal.connect()
def receiver2(*args, **kwargs):
return args, kwargs
while True:
print(signal.send('Hello', 'World', {
'Cheese': 'Signal'
}))
time.sleep(1)
```
## **接口文档**
### **`class Signal`**
```python
from CheeseSignal import Signal
signal = Signal()
```
#### **`self.receivers: List[Receiver]`**
【只读】 接收器的列表,按注册顺序排序。
#### **`self.total_send_num: int`**
【只读】 总计信号发送次数。
#### **`def connect(self, fn: Callable, *, expected_receive_num: int = 0, auto_remove: bool = False)`**
通过函数注册响应函数。
- **参数**
- `expected_receive_num`: 期望接受信号的次数,超过该次数则不再响应信号;0为无限次。
- `auto_remove`: 是否自动删除响应次数超出期望次数的接收器。
- **报错**
- `ValueError`: 已有重复的函数接收器。
#### **`def connect(self, *, expected_receive_num: int = 0, auto_remove: bool = False)`**
通过装饰器注册响应函数。
- **参数**
- `expected_receive_num`: 期望接受信号的次数,超过该次数则不再响应信号;0为无限次。
- `auto_remove`: 是否自动删除响应次数超出期望次数的接收器。
- **报错**
- `ValueError`: 已有重复的函数接收器。
#### **`def send(self, *args, **kwargs) -> List[Any]`**
发送信号。
#### **`async def async_send(self, *args, **kwargs) -> List[Any]`**
在协程环境中发送信号,并请保证所有接收函数都是协程函数。
```python
import asyncio
from CheeseSignal import Signal
async def run_asyncio():
signal = Signal()
await signal.async_send('data1', 'data2', **{
'key1': 'value1',
'key2': 'value2'
})
asyncio.run(run_asyncio())
```
#### **`def disconnect(self, fn: Callable)`**
断开接收器。
```python
from CheeseSignal import Signal
def receiver(*args, **kwargs):
...
signal = Signal()
signal.connect(receiver)
signal.disconnect(receiver)
```
- **报错**
- `ValueError`: 未找到该函数的接收器。
#### **`def reset(self)`**
重置统计数据;所有的接收器的统计数据也会同步清空。
#### **`def disconnect_all(self)`**
断开所有接收器。
#### **`def get_receiver(self, fn: Callable) -> Receiver`**
获取接收器。
```python
from CheeseSignal import Signal
def receiver(*args, **kwargs):
...
signal = Signal()
signal.connect(receiver)
print(signal.get_receiver(receiver))
```
- **报错**
- `ValueError`: 未找到该函数的接收器。
#### **`def index(self, fn: Callable) -> index`**
获取接收器的顺序位置。
```python
from CheeseSignal import Signal
def receiver(*args, **kwargs):
...
signal = Signal()
signal.connect(receiver)
print(signal.index(receiver))
```
- **报错**
- `ValueError`: 未找到该函数的接收器。
### **`class Receiver`**
正常使用并不需要手动创建该类。
```python
from CheeseSignal import Receiver
```
#### **`def __init__(self, signal: Signal, fn: Callable, *, expected_receive_num: int, auto_remove: bool)`**
- **参数**
- `expected_receive_num`: 期望接受信号的次数,超过该次数则不再响应信号;0为无限次。
- `auto_remove`: 是否自动删除响应次数超出期望次数的接收器。
#### **`self.expected_receive_num: int`**
期望接受信号的次数,超过该次数则不再响应信号;0为无限次。
设置值小于`total_receive_num`且`auto_remove is True`,则会立刻删除。
#### **`self.auto_remove: bool`**
是否自动删除响应次数超出期望次数的接收器。
设置为`True`且`is_expired is True`,则会立刻删除。
#### **`self.active: bool`**
是否激活;未激活将忽略信号。
#### **`self.total_receive_num: int`**
【只读】 总计信号接受次数。
#### **`self.remaining_receive_num: int`**
【只读】 剩余的期望信号接受次数;返回为-1代表无期望信号接受次数。
#### **`self.is_expired: bool`**
【只读】 是否过期。
#### **`self.is_unexpired: bool`**
【只读】 是否未过期。
#### **`def reset(self)`**
重统计置数据。
在有期望信号接受次数的情况下,`auto_remove is False`的接收器会重新开始计数并接收信号。
Raw data
{
"_id": null,
"home_page": null,
"name": "CheeseSignal",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "API, BackEnd",
"author": null,
"author_email": "Cheese Unknown <cheese@cheese.ren>",
"download_url": "https://files.pythonhosted.org/packages/1c/6d/2f088d85b8690715fe5cc8e586d32f5fa90546f0dd77ed2d45758c60d2fb/cheesesignal-1.1.0.tar.gz",
"platform": null,
"description": "# **CheeseSignal**\n\n\u4e00\u6b3e\u7b80\u5355\u7684\u4fe1\u53f7\u7cfb\u7edf\u3002\n\n## **\u5b89\u88c5**\n\n\u7cfb\u7edf\u8981\u6c42\uff1aLinux\u3002\n\nPython\u8981\u6c42\uff1a\u76ee\u524d\u4ec5\u4fdd\u8bc1\u652f\u63013.11\u53ca\u4ee5\u4e0a\u7248\u672c\u7684Python\uff0c\u65b0\u7248\u672c\u4f1a\u4f18\u5148\u652f\u6301Python\u7684\u6700\u65b0\u7a33\u5b9a\u7248\u672c\u3002\n\n```\npip install CheeseSignal\n```\n\n## **\u4f7f\u7528**\n\n\u4f7f\u7528\u65b9\u5f0f\u8f83\u4e3a\u7b80\u5355\uff0c\u901a\u8fc7\u51fd\u6570\u6216\u88c5\u9970\u4ef6\u8fde\u63a5\u81f3\u67d0\u4e2a\u4fe1\u53f7\uff0c\u968f\u540e\u7b49\u5f85\u4fe1\u53f7\u53d1\u9001\u3002\n\n```python\nimport time\n\nfrom CheeseSignal import signal\n\nsignal = Signal()\n\ndef receiver1(*args, **kwargs):\n print(arg, kwargs)\nsignal.connect(receiver1)\n\n@signal.connect()\ndef receiver2(*args, **kwargs):\n return args, kwargs\n\nwhile True:\n print(signal.send('Hello', 'World', {\n 'Cheese': 'Signal'\n }))\n time.sleep(1)\n```\n\n## **\u63a5\u53e3\u6587\u6863**\n\n### **`class Signal`**\n\n```python\nfrom CheeseSignal import Signal\n\nsignal = Signal()\n```\n\n#### **`self.receivers: List[Receiver]`**\n\n\u3010\u53ea\u8bfb\u3011 \u63a5\u6536\u5668\u7684\u5217\u8868\uff0c\u6309\u6ce8\u518c\u987a\u5e8f\u6392\u5e8f\u3002\n\n#### **`self.total_send_num: int`**\n\n\u3010\u53ea\u8bfb\u3011 \u603b\u8ba1\u4fe1\u53f7\u53d1\u9001\u6b21\u6570\u3002\n\n#### **`def connect(self, fn: Callable, *, expected_receive_num: int = 0, auto_remove: bool = False)`**\n\n\u901a\u8fc7\u51fd\u6570\u6ce8\u518c\u54cd\u5e94\u51fd\u6570\u3002\n\n- **\u53c2\u6570**\n\n - `expected_receive_num`: \u671f\u671b\u63a5\u53d7\u4fe1\u53f7\u7684\u6b21\u6570\uff0c\u8d85\u8fc7\u8be5\u6b21\u6570\u5219\u4e0d\u518d\u54cd\u5e94\u4fe1\u53f7\uff1b0\u4e3a\u65e0\u9650\u6b21\u3002\n\n - `auto_remove`: \u662f\u5426\u81ea\u52a8\u5220\u9664\u54cd\u5e94\u6b21\u6570\u8d85\u51fa\u671f\u671b\u6b21\u6570\u7684\u63a5\u6536\u5668\u3002\n\n- **\u62a5\u9519**\n\n - `ValueError`: \u5df2\u6709\u91cd\u590d\u7684\u51fd\u6570\u63a5\u6536\u5668\u3002\n\n#### **`def connect(self, *, expected_receive_num: int = 0, auto_remove: bool = False)`**\n\n\u901a\u8fc7\u88c5\u9970\u5668\u6ce8\u518c\u54cd\u5e94\u51fd\u6570\u3002\n\n- **\u53c2\u6570**\n\n - `expected_receive_num`: \u671f\u671b\u63a5\u53d7\u4fe1\u53f7\u7684\u6b21\u6570\uff0c\u8d85\u8fc7\u8be5\u6b21\u6570\u5219\u4e0d\u518d\u54cd\u5e94\u4fe1\u53f7\uff1b0\u4e3a\u65e0\u9650\u6b21\u3002\n\n - `auto_remove`: \u662f\u5426\u81ea\u52a8\u5220\u9664\u54cd\u5e94\u6b21\u6570\u8d85\u51fa\u671f\u671b\u6b21\u6570\u7684\u63a5\u6536\u5668\u3002\n\n- **\u62a5\u9519**\n\n - `ValueError`: \u5df2\u6709\u91cd\u590d\u7684\u51fd\u6570\u63a5\u6536\u5668\u3002\n\n#### **`def send(self, *args, **kwargs) -> List[Any]`**\n\n\u53d1\u9001\u4fe1\u53f7\u3002\n\n#### **`async def async_send(self, *args, **kwargs) -> List[Any]`**\n\n\u5728\u534f\u7a0b\u73af\u5883\u4e2d\u53d1\u9001\u4fe1\u53f7\uff0c\u5e76\u8bf7\u4fdd\u8bc1\u6240\u6709\u63a5\u6536\u51fd\u6570\u90fd\u662f\u534f\u7a0b\u51fd\u6570\u3002\n\n```python\nimport asyncio\n\nfrom CheeseSignal import Signal\n\nasync def run_asyncio():\n signal = Signal()\n await signal.async_send('data1', 'data2', **{\n 'key1': 'value1',\n 'key2': 'value2'\n })\n\nasyncio.run(run_asyncio())\n```\n\n#### **`def disconnect(self, fn: Callable)`**\n\n\u65ad\u5f00\u63a5\u6536\u5668\u3002\n\n```python\nfrom CheeseSignal import Signal\n\ndef receiver(*args, **kwargs):\n ...\n\nsignal = Signal()\nsignal.connect(receiver)\nsignal.disconnect(receiver)\n```\n\n- **\u62a5\u9519**\n\n - `ValueError`: \u672a\u627e\u5230\u8be5\u51fd\u6570\u7684\u63a5\u6536\u5668\u3002\n\n#### **`def reset(self)`**\n\n\u91cd\u7f6e\u7edf\u8ba1\u6570\u636e\uff1b\u6240\u6709\u7684\u63a5\u6536\u5668\u7684\u7edf\u8ba1\u6570\u636e\u4e5f\u4f1a\u540c\u6b65\u6e05\u7a7a\u3002\n\n#### **`def disconnect_all(self)`**\n\n\u65ad\u5f00\u6240\u6709\u63a5\u6536\u5668\u3002\n\n#### **`def get_receiver(self, fn: Callable) -> Receiver`**\n\n\u83b7\u53d6\u63a5\u6536\u5668\u3002\n\n```python\nfrom CheeseSignal import Signal\n\ndef receiver(*args, **kwargs):\n ...\n\nsignal = Signal()\nsignal.connect(receiver)\n\nprint(signal.get_receiver(receiver))\n```\n\n- **\u62a5\u9519**\n\n - `ValueError`: \u672a\u627e\u5230\u8be5\u51fd\u6570\u7684\u63a5\u6536\u5668\u3002\n\n#### **`def index(self, fn: Callable) -> index`**\n\n\u83b7\u53d6\u63a5\u6536\u5668\u7684\u987a\u5e8f\u4f4d\u7f6e\u3002\n\n```python\nfrom CheeseSignal import Signal\n\ndef receiver(*args, **kwargs):\n ...\n\nsignal = Signal()\nsignal.connect(receiver)\n\nprint(signal.index(receiver))\n```\n\n- **\u62a5\u9519**\n\n - `ValueError`: \u672a\u627e\u5230\u8be5\u51fd\u6570\u7684\u63a5\u6536\u5668\u3002\n\n### **`class Receiver`**\n\n\u6b63\u5e38\u4f7f\u7528\u5e76\u4e0d\u9700\u8981\u624b\u52a8\u521b\u5efa\u8be5\u7c7b\u3002\n\n```python\nfrom CheeseSignal import Receiver\n```\n\n#### **`def __init__(self, signal: Signal, fn: Callable, *, expected_receive_num: int, auto_remove: bool)`**\n\n- **\u53c2\u6570**\n\n - `expected_receive_num`: \u671f\u671b\u63a5\u53d7\u4fe1\u53f7\u7684\u6b21\u6570\uff0c\u8d85\u8fc7\u8be5\u6b21\u6570\u5219\u4e0d\u518d\u54cd\u5e94\u4fe1\u53f7\uff1b0\u4e3a\u65e0\u9650\u6b21\u3002\n\n - `auto_remove`: \u662f\u5426\u81ea\u52a8\u5220\u9664\u54cd\u5e94\u6b21\u6570\u8d85\u51fa\u671f\u671b\u6b21\u6570\u7684\u63a5\u6536\u5668\u3002\n\n#### **`self.expected_receive_num: int`**\n\n\u671f\u671b\u63a5\u53d7\u4fe1\u53f7\u7684\u6b21\u6570\uff0c\u8d85\u8fc7\u8be5\u6b21\u6570\u5219\u4e0d\u518d\u54cd\u5e94\u4fe1\u53f7\uff1b0\u4e3a\u65e0\u9650\u6b21\u3002\n\n\u8bbe\u7f6e\u503c\u5c0f\u4e8e`total_receive_num`\u4e14`auto_remove is True`\uff0c\u5219\u4f1a\u7acb\u523b\u5220\u9664\u3002\n\n#### **`self.auto_remove: bool`**\n\n\u662f\u5426\u81ea\u52a8\u5220\u9664\u54cd\u5e94\u6b21\u6570\u8d85\u51fa\u671f\u671b\u6b21\u6570\u7684\u63a5\u6536\u5668\u3002\n\n\u8bbe\u7f6e\u4e3a`True`\u4e14`is_expired is True`\uff0c\u5219\u4f1a\u7acb\u523b\u5220\u9664\u3002\n\n#### **`self.active: bool`**\n\n\u662f\u5426\u6fc0\u6d3b\uff1b\u672a\u6fc0\u6d3b\u5c06\u5ffd\u7565\u4fe1\u53f7\u3002\n\n#### **`self.total_receive_num: int`**\n\n\u3010\u53ea\u8bfb\u3011 \u603b\u8ba1\u4fe1\u53f7\u63a5\u53d7\u6b21\u6570\u3002\n\n#### **`self.remaining_receive_num: int`**\n\n\u3010\u53ea\u8bfb\u3011 \u5269\u4f59\u7684\u671f\u671b\u4fe1\u53f7\u63a5\u53d7\u6b21\u6570\uff1b\u8fd4\u56de\u4e3a-1\u4ee3\u8868\u65e0\u671f\u671b\u4fe1\u53f7\u63a5\u53d7\u6b21\u6570\u3002\n\n#### **`self.is_expired: bool`**\n\n\u3010\u53ea\u8bfb\u3011 \u662f\u5426\u8fc7\u671f\u3002\n\n#### **`self.is_unexpired: bool`**\n\n\u3010\u53ea\u8bfb\u3011 \u662f\u5426\u672a\u8fc7\u671f\u3002\n\n#### **`def reset(self)`**\n\n\u91cd\u7edf\u8ba1\u7f6e\u6570\u636e\u3002\n\n\u5728\u6709\u671f\u671b\u4fe1\u53f7\u63a5\u53d7\u6b21\u6570\u7684\u60c5\u51b5\u4e0b\uff0c`auto_remove is False`\u7684\u63a5\u6536\u5668\u4f1a\u91cd\u65b0\u5f00\u59cb\u8ba1\u6570\u5e76\u63a5\u6536\u4fe1\u53f7\u3002\n",
"bugtrack_url": null,
"license": null,
"summary": "\u4e00\u6b3e\u7b80\u7ea6\u7684\u4fe1\u53f7\u7cfb\u7edf\u3002",
"version": "1.1.0",
"project_urls": {
"Source": "https://github.com/CheeseUnknown/CheeseSignal"
},
"split_keywords": [
"api",
" backend"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "182b3a95c49461d8a4308273958bf30001a26f0779f316b4e535bc8cd0528793",
"md5": "a99174c420e8d68319ea40de295ffec2",
"sha256": "c2896d5faf25c8d28bcf4f9ec238088ba701fd526f615578fd22947a4b462532"
},
"downloads": -1,
"filename": "cheesesignal-1.1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "a99174c420e8d68319ea40de295ffec2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 5301,
"upload_time": "2024-04-22T17:38:08",
"upload_time_iso_8601": "2024-04-22T17:38:08.823327Z",
"url": "https://files.pythonhosted.org/packages/18/2b/3a95c49461d8a4308273958bf30001a26f0779f316b4e535bc8cd0528793/cheesesignal-1.1.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1c6d2f088d85b8690715fe5cc8e586d32f5fa90546f0dd77ed2d45758c60d2fb",
"md5": "6851047dd4aed35c5f41c6463b75542f",
"sha256": "37d756c7fc28d5696d8108c0059340b1e1d57d7565329712525428a220bb1401"
},
"downloads": -1,
"filename": "cheesesignal-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "6851047dd4aed35c5f41c6463b75542f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 4075,
"upload_time": "2024-04-22T17:38:16",
"upload_time_iso_8601": "2024-04-22T17:38:16.075194Z",
"url": "https://files.pythonhosted.org/packages/1c/6d/2f088d85b8690715fe5cc8e586d32f5fa90546f0dd77ed2d45758c60d2fb/cheesesignal-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-04-22 17:38:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "CheeseUnknown",
"github_project": "CheeseSignal",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "cheesesignal"
}