1
0
forked from bot/app
LiteyukiBot/assets/storage.html-CzPHOCFJ.js

159 lines
52 KiB
JavaScript
Raw Normal View History

import{_ as n,o as s,c as a,d as e}from"./app-EhCe7g9m.js";const t={},p=e(`<h3 id="shared-memory-passive-chan-on-receive-lambda-d-d-0-get" tabindex="-1"><a class="header-anchor" href="#shared-memory-passive-chan-on-receive-lambda-d-d-0-get"><span><code>@shared_memory.passive_chan.on_receive(lambda d: d[0] == &#39;get&#39;)</code></span></a></h3><h3 id="func-on-get" tabindex="-1"><a class="header-anchor" href="#func-on-get"><span><em>func</em> <code>on_get()</code></span></a></h3><details><summary><b>源代码</b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token decorator annotation punctuation">@shared_memory<span class="token punctuation">.</span>passive_chan<span class="token punctuation">.</span>on_receive</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> d<span class="token punctuation">:</span> d<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">&#39;get&#39;</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">on_get</span><span class="token punctuation">(</span>data<span class="token punctuation">:</span> <span class="token builtin">tuple</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
key <span class="token operator">=</span> data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;key&#39;</span><span class="token punctuation">]</span>
default <span class="token operator">=</span> data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;default&#39;</span><span class="token punctuation">]</span>
recv_chan <span class="token operator">=</span> data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;recv_chan&#39;</span><span class="token punctuation">]</span>
recv_chan<span class="token punctuation">.</span>send<span class="token punctuation">(</span>shared_memory<span class="token punctuation">.</span>get<span class="token punctuation">(</span>key<span class="token punctuation">,</span> default<span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="shared-memory-passive-chan-on-receive-lambda-d-d-0-set" tabindex="-1"><a class="header-anchor" href="#shared-memory-passive-chan-on-receive-lambda-d-d-0-set"><span><code>@shared_memory.passive_chan.on_receive(lambda d: d[0] == &#39;set&#39;)</code></span></a></h3><h3 id="func-on-set" tabindex="-1"><a class="header-anchor" href="#func-on-set"><span><em>func</em> <code>on_set()</code></span></a></h3><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token decorator annotation punctuation">@shared_memory<span class="token punctuation">.</span>passive_chan<span class="token punctuation">.</span>on_receive</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> d<span class="token punctuation">:</span> d<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">&#39;set&#39;</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">on_set</span><span class="token punctuation">(</span>data<span class="token punctuation">:</span> <span class="token builtin">tuple</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
key <span class="token operator">=</span> data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;key&#39;</span><span class="token punctuation">]</span>
value <span class="token operator">=</span> data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;value&#39;</span><span class="token punctuation">]</span>
shared_memory<span class="token punctuation">.</span><span class="token builtin">set</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> value<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="shared-memory-passive-chan-on-receive-lambda-d-d-0-delete" tabindex="-1"><a class="header-anchor" href="#shared-memory-passive-chan-on-receive-lambda-d-d-0-delete"><span><code>@shared_memory.passive_chan.on_receive(lambda d: d[0] == &#39;delete&#39;)</code></span></a></h3><h3 id="func-on-delete" tabindex="-1"><a class="header-anchor" href="#func-on-delete"><span><em>func</em> <code>on_delete()</code></span></a></h3><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token decorator annotation punctuation">@shared_memory<span class="token punctuation">.</span>passive_chan<span class="token punctuation">.</span>on_receive</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> d<span class="token punctuation">:</span> d<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">&#39;delete&#39;</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">on_delete</span><span class="token punctuation">(</span>data<span class="token punctuation">:</span> <span class="token builtin">tuple</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
key <span class="token operator">=</span> data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;key&#39;</span><span class="token punctuation">]</span>
shared_memory<span class="token punctuation">.</span>delete<span class="token punctuation">(</span>key<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="shared-memory-passive-chan-on-receive-lambda-d-d-0-get-all" tabindex="-1"><a class="header-anchor" href="#shared-memory-passive-chan-on-receive-lambda-d-d-0-get-all"><span><code>@shared_memory.passive_chan.on_receive(lambda d: d[0] == &#39;get_all&#39;)</code></span></a></h3><h3 id="func-on-get-all" tabindex="-1"><a class="header-anchor" href="#func-on-get-all"><span><em>func</em> <code>on_get_all()</code></span></a></h3><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token decorator annotation punctuation">@shared_memory<span class="token punctuation">.</span>passive_chan<span class="token punctuation">.</span>on_receive</span><span class="token punctuation">(</span><span class="token keyword">lambda</span> d<span class="token punctuation">:</span> d<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">&#39;get_all&#39;</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">on_get_all</span><span class="token punctuation">(</span>data<span class="token punctuation">:</span> <span class="token builtin">tuple</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
recv_chan <span class="token operator">=</span> data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;recv_chan&#39;</span><span class="token punctuation">]</span>
recv_chan<span class="token punctuation">.</span>send<span class="token punctuation">(</span>shared_memory<span class="token punctuation">.</span>get_all<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="class-keyvaluestore" tabindex="-1"><a class="header-anchor" href="#class-keyvaluestore"><span><strong>class</strong> <code>KeyValueStore</code></span></a></h3><h3 id="method-init-self" tabindex="-1"><a class="header-anchor" href="#method-init-self"><span><em>method</em> <code>__init__(self)</code></span></a></h3><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
self<span class="token punctuation">.</span>_store <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
self<span class="token punctuation">.</span>active_chan <span class="token operator">=</span> Channel<span class="token punctuation">[</span><span class="token builtin">tuple</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Optional<span class="token punctuation">[</span><span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">(</span>name<span class="token operator">=</span><span class="token string">&#39;shared_memory-active&#39;</span><span class="token punctuation">)</span>
self<span class="token punctuation">.</span>passive_chan <span class="token operator">=</span> Channel<span class="token punctuation">[</span><span class="token builtin">tuple</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Optional<span class="token punctuation">[</span><span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">(</span>name<span class="token operator">=</span><span class="token string">&#39;shared_memory-passive&#39;</span><span class="token punctuation">)</span>
self<span class="token punctuation">.</span>publish_channel <span class="token operator">=</span> Channel<span class="token punctuation">[</span><span class="token builtin">tuple</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">(</span>name<span class="token operator">=</span><span class="token string">&#39;shared_memory-publish&#39;</span><span class="token punctuation">)</span>
self<span class="token punctuation">.</span>is_main_receive_loop_running <span class="token operator">=</span> <span class="token boolean">False</span>
self<span class="token punctuation">.</span>is_sub_receive_loop_running <span class="token operator">=</span> <span class="token boolean">False</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="method-set-self-key-str-value-any-none" tabindex="-1"><a class="header-anchor" href="#method-set-self-key-str-value-any-none"><span><em>method</em> <code>set(self, key: str, value: Any) -&gt; None</code></span></a></h3><p><strong></strong>: </p><p><strong></strong>:</p><blockquote><ul><li>key: </li><li>value: </li></ul></blockquote><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token keyword">def</span> <span class="token function">set</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> key<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">,</span> value<span class="token punctuation">:</span> Any<span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">&gt;</span> <span class="token boolean">None</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">&quot;&quot;&quot;
设置键值对
Args:
key:
value:
&quot;&quot;&quot;</span>
<span class="token keyword">if</span> IS_MAIN_PROCESS<span class="token punctuation">:</span>
lock <span class="token operator">=</span> _get_lock<span class="token punctuation">(</span>key<span class="token punctuation">)</span>
<span class="token keyword">with</span> lock<span class="token punctuation">:</span>
self<span class="token punctuation">.</span>_store<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token operator">=</span> value
<span class="token keyword">else</span><span class="token punctuation">:</span>
self<span class="token punctuation">.</span>passive_chan<span class="token punctuation">.</span>send<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token string">&#39;set&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">&#39;key&#39;</span><span class="token punctuation">:</span> key<span class="token punctuation">,</span> <span class="token string">&#39;value&#39;</span><span class="token punctuation">:</span> value<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="method-get-self-key-str-default-optional-any-none-optional-any" tabindex="-1"><a class="header-anchor" href="#method-get-self-key-str-default-optional-any-none-optional-any"><span><em>method</em> <code>get(self, key: str, default: Optional[Any] = None) -&gt; Optional[Any]</code></span></a></h3><p><strong></strong>: </p><p><strong></strong>: Any: </p><p><strong></strong>:</p><blockquote><ul><li>key: </li><li>default: </li></ul></blockquote><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token keyword">def</span> <span class="token function">get</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> key<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">,</span> default<span class="token punctuation">:</span> Optional<span class="token punctuation">[</span>Any<span class="token punctuation">]</span><span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">&gt;</span> Optional<span class="token punctuation">[</span>Any<span class="token punctuation">]</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">&quot;&quot;&quot;
获取键值对
Args:
key:
default: 默认值
Returns:
Any:
&quot;&quot;&quot;</span>
<span class="token keyword">if</span> IS_MAIN_PROCESS<span class="token punctuation">:</span>
lock <span class="token operator">=</span> _get_lock<span class="token punctuation">(</span>key<span class="token punctuation">)</span>
<span class="token keyword">with</span> lock<span class="token punctuation">:</span>
<span class="token keyword">return</span> self<span class="token punctuation">.</span>_store<span class="token punctuation">.</span>get<span class="token punctuation">(</span>key<span class="token punctuation">,</span> default<span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
recv_chan <span class="token operator">=</span> Channel<span class="token punctuation">[</span>Optional<span class="token punctuation">[</span>Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">(</span><span class="token string">&#39;recv_chan&#39;</span><span class="token punctuation">)</span>
self<span class="token punctuation">.</span>passive_chan<span class="token punctuation">.</span>send<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token string">&#39;get&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">&#39;key&#39;</span><span class="token punctuation">:</span> key<span class="token punctuation">,</span> <span class="token string">&#39;default&#39;</span><span class="token punctuation">:</span> default<span class="token punctuation">,</span> <span class="token string">&#39;recv_chan&#39;</span><span class="token punctuation">:</span> recv_chan<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token keyword">return</span> recv_chan<span class="token punctuation">.</span>receive<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="method-delete-self-key-str-ignore-key-error-bool-true-none" tabindex="-1"><a class="header-anchor" href="#method-delete-self-key-str-ignore-key-error-bool-true-none"><span><em>method</em> <code>delete(self, key: str, ignore_key_error: bool = True) -&gt; None</code></span></a></h3><p><strong></strong>: </p><p><strong></strong>:</p><blockquote><ul><li>key: </li><li>ignore_key_error: </li></ul></blockquote><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token keyword">def</span> <span class="token function">delete</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> key<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">,</span> ignore_key_error<span class="token punctuation">:</span> <span class="token builtin">bool</span><span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">&gt;</span> <span class="token boolean">None</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">&quot;&quot;&quot;
删除键值对
Args:
key:
ignore_key_error: 是否忽略键不存在的错误
Returns:
&quot;&quot;&quot;</span>
<span class="token keyword">if</span> IS_MAIN_PROCESS<span class="token punctuation">:</span>
lock <span class="token operator">=</span> _get_lock<span class="token punctuation">(</span>key<span class="token punctuation">)</span>
<span class="token keyword">with</span> lock<span class="token punctuation">:</span>
<span class="token keyword">if</span> key <span class="token keyword">in</span> self<span class="token punctuation">.</span>_store<span class="token punctuation">:</span>
<span class="token keyword">try</span><span class="token punctuation">:</span>
<span class="token keyword">del</span> self<span class="token punctuation">.</span>_store<span class="token punctuation">[</span>key<span class="token punctuation">]</span>
<span class="token keyword">del</span> _locks<span class="token punctuation">[</span>key<span class="token punctuation">]</span>
<span class="token keyword">except</span> KeyError <span class="token keyword">as</span> e<span class="token punctuation">:</span>
<span class="token keyword">if</span> <span class="token keyword">not</span> ignore_key_error<span class="token punctuation">:</span>
<span class="token keyword">raise</span> e
<span class="token keyword">else</span><span class="token punctuation">:</span>
self<span class="token punctuation">.</span>passive_chan<span class="token punctuation">.</span>send<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token string">&#39;delete&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">&#39;key&#39;</span><span class="token punctuation">:</span> key<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="method-get-all-self-dict-str-any" tabindex="-1"><a class="header-anchor" href="#method-get-all-self-dict-str-any"><span><em>method</em> <code>get_all(self) -&gt; dict[str, Any]</code></span></a></h3><p><strong></strong>: </p><p><strong></strong>: dict[str, Any]: </p><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token keyword">def</span> <span class="token function">get_all</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">&gt;</span> <span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">&quot;&quot;&quot;
获取所有键值对
Returns:
dict[str, Any]: 键值对
&quot;&quot;&quot;</span>
<span class="token keyword">if</span> IS_MAIN_PROCESS<span class="token punctuation">:</span>
<span class="token keyword">return</span> self<span class="token punctuation">.</span>_store
<span class="token keyword">else</span><span class="token punctuation">:</span>
recv_chan <span class="token operator">=</span> Channel<span class="token punctuation">[</span><span class="token builtin">dict</span><span class="token punctuation">[</span><span class="token builtin">str</span><span class="token punctuation">,</span> Any<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">(</span><span class="token string">&#39;recv_chan&#39;</span><span class="token punctuation">)</span>
self<span class="token punctuation">.</span>passive_chan<span class="token punctuation">.</span>send<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token string">&#39;get_all&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">&#39;recv_chan&#39;</span><span class="token punctuation">:</span> recv_chan<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token keyword">return</span> recv_chan<span class="token punctuation">.</span>receive<span class="token punctuation">(</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="method-publish-self-channel-str-data-any-none" tabindex="-1"><a class="header-anchor" href="#method-publish-self-channel-str-data-any-none"><span><em>method</em> <code>publish(self, channel_: str, data: Any) -&gt; None</code></span></a></h3><p><strong></strong>: </p><p><strong></strong>:</p><blockquote><ul><li>channel_: </li><li>data: </li></ul></blockquote><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token keyword">def</span> <span class="token function">publish</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> channel_<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> Any<span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">&gt;</span> <span class="token boolean">None</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">&quot;&quot;&quot;
发布消息
Args:
channel_: 频道
data: 数据
Returns:
&quot;&quot;&quot;</span>
self<span class="token punctuation">.</span>active_chan<span class="token punctuation">.</span>send<span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token string">&#39;publish&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">&#39;channel&#39;</span><span class="token punctuation">:</span> channel_<span class="token punctuation">,</span> <span class="token string">&#39;data&#39;</span><span class="token punctuation">:</span> data<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="method-on-subscriber-receive-self-channel-str-callable-on-receive-func-on-receive-func" tabindex="-1"><a class="header-anchor" href="#method-on-subscriber-receive-self-channel-str-callable-on-receive-func-on-receive-func"><span><em>method</em> <code>on_subscriber_receive(self, channel_: str) -&gt; Callable[[ON_RECEIVE_FUNC], ON_RECEIVE_FUNC]</code></span></a></h3><p><strong></strong>: </p><p><strong></strong>: </p><p><strong></strong>:</p><blockquote><ul><li>channel_: </li></ul></blockquote><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token keyword">def</span> <span class="token function">on_subscriber_receive</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> channel_<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">&gt;</span> Callable<span class="token punctuation">[</span><span class="token punctuation">[</span>ON_RECEIVE_FUNC<span class="token punctuation">]</span><span class="token punctuation">,</span> ON_RECEIVE_FUNC<span class="token punctuation">]</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">&quot;&quot;&quot;
订阅者接收消息时的回调
Args:
channel_: 频道
Returns:
装饰器
&quot;&quot;&quot;</span>
<span class="token keyword">if</span> <span class="token keyword">not</span> IS_MAIN_PROCESS<span class="token punctuation">:</span>
<span class="token keyword">raise</span> RuntimeError<span class="token punctuation">(</span><span class="token string">&#39;Cannot subscribe in sub process.&#39;</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">decorator</span><span class="token punctuation">(</span>func<span class="token punctuation">:</span> ON_RECEIVE_FUNC<span class="token punctuation">)</span> <span class="token operator">-</span><span class="token operator">&gt;</span> ON_RECEIVE_FUNC<span class="token punctuation">:</span>
<span class="token keyword">async</span> <span class="token keyword">def</span> <span class="token function">wrapper</span><span class="token punctuation">(</span>data<span class="token punctuation">:</span> Any<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> is_coroutine_callable<span class="token punctuation">(</span>func<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">await</span> func<span class="token punctuation">(</span>data<span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
func<span class="token punctuation">(</span>data<span class="token punctuation">)</span>
<span class="token keyword">if</span> IS_MAIN_PROCESS<span class="token punctuation">:</span>
<span class="token keyword">if</span> channel_ <span class="token keyword">not</span> <span class="token keyword">in</span> _on_main_subscriber_receive_funcs<span class="token punctuation">:</span>
_on_main_subscriber_receive_funcs<span class="token punctuation">[</span>channel_<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>
_on_main_subscriber_receive_funcs<span class="token punctuation">[</span>channel_<span class="token punctuation">]</span><span class="token punctuation">.</span>append<span class="token punctuation">(</span>wrapper<span class="token punctuation">)</span>
<span class="token keyword">else</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> channel_ <span class="token keyword">not</span> <span class="token keyword">in</span> _on_sub_subscriber_receive_funcs<span class="token punctuation">:</span>
_on_sub_subscriber_receive_funcs<span class="token punctuation">[</span>channel_<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>
_on_sub_subscriber_receive_funcs<span class="token punctuation">[</span>channel_<span class="token punctuation">]</span><span class="token punctuation">.</span>append<span class="token punctuation">(</span>wrapper<span class="token punctuation">)</span>
<span class="token keyword">return</span> wrapper
<span class="token keyword">return</span> decorator
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="staticmethod" tabindex="-1"><a class="header-anchor" href="#staticmethod"><span><code>@staticmethod</code></span></a></h3><h3 id="async-method-run-subscriber-receive-funcs-channel-str-data-any" tabindex="-1"><a class="header-anchor" href="#async-method-run-subscriber-receive-funcs-channel-str-data-any"><span><em>async method</em> <code>run_subscriber_receive_funcs(channel_: str, data: Any)</code></span></a></h3><p><strong></strong>: </p><p><strong></strong>:</p><blockquote><ul><li>channel_: </li><li>data: </li></ul></blockquote><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token decorator annotation punctuation">@staticmethod</span>
<span class="token keyword">async</span> <span class="token keyword">def</span> <span class="token function">run_subscriber_receive_funcs</span><span class="token punctuation">(</span>channel_<span class="token punctuation">:</span> <span class="token builtin">str</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> Any<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">&quot;&quot;&quot;
运行订阅者接收函数
Args:
channel_: 频道
data: 数据
&quot;&quot;&quot;</span>
<span class="token punctuation">[</span>asyncio<span class="token punctuation">.</span>create_task<span class="token punctuation">(</span>func<span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">for</span> func <span class="token keyword">in</span> _on_main_subscriber_receive_funcs<span class="token punctuation">[</span>channel_<span class="token punctuation">]</span><span class="token punctuation">]</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="async-method-start-receive-loop-self" tabindex="-1"><a class="header-anchor" href="#async-method-start-receive-loop-self"><span><em>async method</em> <code>start_receive_loop(self)</code></span></a></h3><p><strong></strong>: </p><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token keyword">async</span> <span class="token keyword">def</span> <span class="token function">start_receive_loop</span><span class="token punctuation">(</span>self<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token triple-quoted-string string">&quot;&quot;&quot;
启动发布订阅接收器循环在主进程中运行若有子进程订阅则推送给子进程
&quot;&quot;&quot;</span>
<span class="token keyword">if</span> <span class="token keyword">not</span> IS_MAIN_PROCESS<span class="token punctuation">:</span>
<span class="token keyword">raise</span> RuntimeError<span class="token punctuation">(</span><span class="token string">&#39;Cannot start receive loop in sub process.&#39;</span><span class="token punctuation">)</span>
<span class="token keyword">while</span> <span class="token boolean">True</span><span class="token punctuation">:</span>
data <span class="token operator">=</span> <span class="token keyword">await</span> self<span class="token punctuation">.</span>active_chan<span class="token punctuation">.</span>async_receive<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token keyword">if</span> data<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token string">&#39;publish&#39;</span><span class="token punctuation">:</span>
<span class="token keyword">await</span> self<span class="token punctuation">.</span>run_subscriber_receive_funcs<span class="token punctuation">(</span>data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;channel&#39;</span><span class="token punctuation">]</span><span class="token punctuation">,</span> data<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token string">&#39;data&#39;</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
self<span class="token punctuation">.</span>publish_channel<span class="token punctuation">.</span>send<span class="token punctuation">(</span>data<span class="token punctuation">)</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="class-globalkeyvaluestore" tabindex="-1"><a class="header-anchor" href="#class-globalkeyvaluestore"><span><strong>class</strong> <code>GlobalKeyValueStore</code></span></a></h3><h3 id="classmethod" tabindex="-1"><a class="header-anchor" href="#classmethod"><span><code>@classmethod</code></span></a></h3><h3 id="method-get-instance-cls" tabindex="-1"><a class="header-anchor" href="#method-get-instance-cls"><span><em>method</em> <code>get_instance(cls)</code></span></a></h3><details><summary><b></b></summary><div class="language-python line-numbers-mode" data-ext="py" data-title="py"><pre class="language-python"><code><span class="token decorator annotation punctuation">@classmethod</span>
<span class="token keyword">def</span> <span class="token function">get_instance</span><span class="token punctuation">(</span>cls<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">if</span> cls<span class="token punctuation">.</span>_instance <span class="token keyword">is</span> <span class="token boolean">None</span><span class="token punctuation">:</span>
<span class="token keyword">with</span> cls<span class="token punctuation">.</span>_lock<span class="token punctuation">:</span>
<span class="token keyword">if</span> cls<span class="token punctuation">.</span>_instance <span class="token keyword">is</span> <span class="token boolean">None</span><span class="token punctuation">:</span>
cls<span class="token punctuation">.</span>_instance <span class="token operator">=</span> KeyValueStore<span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token keyword">return</span> cls<span class="token punctuation">.</span>_instance
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></details><h3 id="var-on-main-subscriber-receive-funcs" tabindex="-1"><a class="header-anchor" href="#var-on-main-subscriber-receive-funcs"><span><em><strong>var</strong></em> <code>_on_main_subscriber_receive_funcs = {}</code></span></a></h3><ul><li><p><strong></strong>: <code>dict[str, list[ASYNC_ON_RECEIVE_FUNC]]</code></p></li><li><p><strong></strong>: </p></li></ul><h3 id="var-on-sub-subscriber-receive-funcs" tabindex="-1"><a class="header-anchor" href="#var-on-sub-subscriber-receive-funcs"><span><em><strong>var</strong></em> <code>_on_sub_subscriber_receive_funcs = {}</code></span></a></h3><ul><li><p><strong></strong>: <code>dict[str, list[ASYNC_ON_RECEIVE_FUNC]]</code></p></li><li><p><strong></strong>: </p></li></ul><h3 id="var-shared-memory-globalkeyvaluestore-get-instance" tabindex="-1"><a class="header-anchor" href="#var-shared-memory-globalkeyvaluestore-get-instance"><span><em><strong>var</strong></em> <code>shared_memory = GlobalKeyValueStore.get_instance()</code></span></a></h3><ul><li><strong></strong>: <code>KeyValueStore</code></li></ul>`,65),o=[p];function c(l,i){return s(),a("div",null,o)}const r=n(t,[["render",c],["__file","storage.html.vue"]]),d=JSON.parse(`{"path":"/api/comm/storage.html","title":"liteyuki.comm.storage","lang":"zh-CN","frontmatter":{"title":"liteyuki.comm.storage","description":"@shared_memory.passive_chan.on_receive(lambda d: d[0] == 'get') func on_get() @shared_memory.passive_chan.on_receive(lambda d: d[0] == 'set') func on_set() @shared_memor...","head":[["link",{"rel":"alternate","hreflang":"en-us","href":"https://vuepress-theme-hope-docs-demo.netlify.app/en/api/comm/storage.html"}],["meta",{"property":"og:url","content":"https://vuepress-theme-hope-docs-demo.netlify.app/api/comm/storage.html"}],["meta",{"property":"og:site_name","content":"LiteyukiBot "}],["meta",{"property":"og:title","content":"liteyuki.comm.storage"}],["meta",{"property":"og:description","content":"@shared_memory.passive_chan.on_receive(lambda d: d[0] == 'get') func on_get() @shared_memory.passive_chan.on_receive(lambda d: d[0] == 'set') func on_set() @shared_memor..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:locale:alternate","content":"en-US"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"liteyuki.comm.storage\\",\\"image\\":[\\"\\"],\\"dateModified\\":null,\\"author\\":[]}"]]},"headers":[{"level":3,"title":"@shared_memory.passive_chan.on_receive(lambda d: d[0] == 'get')","slug":"shared-memory-passive-chan-on-receive-lambda-d-d-0-get","link":"#shared-memory-passive-chan-on-receive-lambda-d-d-0-get","children":[]},{"level":3,"title":"func on_get()","slug":"func-on-get","link":"#func-on-get","children":[]},{"level":3,"title":"@shared_memory.passive_chan.on_receive(lambda d: d[0] == 'set')","slug":"shared-memory-passive-chan-on-receive-lambda-d-d-0-set","link":"#shared-memory-passive-chan-on-receive-lambda-d-d-0-set","children":[]},{"level":3,"title":"func on_set()","slug":"func-on-set","link":"#func-on-set","children":[]},{"level":3,"title":"@shared_memory.passive_chan.on_receive(lambda d: d[0] == 'delete')","slug":"shared-memory-passive-chan-on-receive-lambda-d-d-0-delete","link":"#shared-memory-passive-chan-on-receive-lambda-d-d-0-delete","children":[]},{"level":3,"title":"func on_delete()","slug":"func-on-delete","link":"#func-on-delete","children":[]},{"level":3,"title":"@shared_memory.passive_chan.on_receive(lambda d: d[0] == 'get_all')","slug":"shared-memory-passive-chan-on-receive-lambda-d-d-0-get-all","link":