2024-08-29 13:53:08 +08:00
<!doctype html>
< html lang = "en-US" data-theme = "light" >
< head >
< meta charset = "utf-8" / >
< meta name = "viewport" content = "width=device-width,initial-scale=1" / >
< meta name = "generator" content = "VuePress 2.0.0-rc.9" / >
< meta name = "theme" content = "VuePress Theme Hope 2.0.0-rc.32" / >
< style >
html {
background: var(--bg-color, #fff);
}
html[data-theme="dark"] {
background: var(--bg-color, #1d1e1f);
}
body {
background: var(--bg-color);
}
< / style >
< script >
const userMode = localStorage.getItem("vuepress-theme-hope-scheme");
const systemDarkMode =
window.matchMedia & &
window.matchMedia("(prefers-color-scheme: dark)").matches;
if (userMode === "dark" || (userMode !== "light" & & systemDarkMode)) {
document.documentElement.setAttribute("data-theme", "dark");
}
< / script >
2024-08-29 14:21:20 +08:00
< link rel = "alternate" hreflang = "zh-cn" href = "https://vuepress-theme-hope-docs-demo.netlify.app/dev/api/comm/channel.html" > < meta property = "og:url" content = "https://vuepress-theme-hope-docs-demo.netlify.app/en/dev/api/comm/channel.html" > < meta property = "og:site_name" content = "LiteyukiBot" > < meta property = "og:title" content = "liteyuki.comm.channel" > < meta property = "og:description" content = "func set_channel() Description: 设置通道实例 Arguments: name: 通道名称 channel: 通道实例 Source code func set_channels() Description: 设置通道实例 Arguments: channels: 通道名称 Source code func get_cha..." > < meta property = "og:type" content = "article" > < meta property = "og:locale" content = "en-US" > < meta property = "og:locale:alternate" content = "zh-CN" > < meta property = "og:updated_time" content = "2024-08-29T06:19:39.000Z" > < meta property = "article:modified_time" content = "2024-08-29T06:19:39.000Z" > < script type = "application/ld+json" > { "@context" : "https://schema.org" , "@type" : "Article" , "headline" : "liteyuki.comm.channel" , "image" : [ "" ] , "dateModified" : "2024-08-29T06:19:39.000Z" , "author" : [ ] } < / script > < script src = "/js/en/get_data.js" type = "module" > < / script > < script src = "/js/style.js" type = "module" > < / script > < link rel = "icon" href = "https://cdn.liteyuki.icu/favicon.ico" > < link rel = "stylesheet" href = "https://cdn.bootcdn.net/ajax/libs/firacode/6.2.0/fira_code.min.css" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" > < title > liteyuki.comm.channel | LiteyukiBot< / title > < meta name = "description" content = "func set_channel() Description: 设置通道实例 Arguments: name: 通道名称 channel: 通道实例 Source code func set_channels() Description: 设置通道实例 Arguments: channels: 通道名称 Source code func get_cha..." >
2024-08-29 13:53:08 +08:00
< link rel = "preload" href = "/assets/style-DI-mIFA3.css" as = "style" > < link rel = "stylesheet" href = "/assets/style-DI-mIFA3.css" >
2024-08-29 14:24:11 +08:00
< link rel = "modulepreload" href = "/assets/app-gnbtOU7f.js" > < link rel = "modulepreload" href = "/assets/channel.html-DXBu3gS-.js" >
< link rel = "prefetch" href = "/assets/index.html-BXcp01wa.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-degKbZTI.js" as = "script" > < link rel = "prefetch" href = "/assets/config.html-B1syaxcK.js" as = "script" > < link rel = "prefetch" href = "/assets/fandq.html-DbukZrxx.js" as = "script" > < link rel = "prefetch" href = "/assets/install.html-Dn0--08C.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-MLET2Zfm.js" as = "script" > < link rel = "prefetch" href = "/assets/dev_comm.html-Bb1BvdA7.js" as = "script" > < link rel = "prefetch" href = "/assets/dev_lyfunc.html-BJ-C7Gj8.js" as = "script" > < link rel = "prefetch" href = "/assets/dev_lyplugin.html-CC1h4TdW.js" as = "script" > < link rel = "prefetch" href = "/assets/dev_resource_pack.html-DbZ6Vbw3.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-CiqpGOia.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-Dm3bHRQN.js" as = "script" > < link rel = "prefetch" href = "/assets/plugin.html-DcbGc7PU.js" as = "script" > < link rel = "prefetch" href = "/assets/resource.html-BS7DPW3y.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-CQDwUMv7.js" as = "script" > < link rel = "prefetch" href = "/assets/agreement.html-Q64snoiY.js" as = "script" > < link rel = "prefetch" href = "/assets/basic_command.html-CqPYA__F.js" as = "script" > < link rel = "prefetch" href = "/assets/extra_command.html-CE4BARPP.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-BLhSWlLB.js" as = "script" > < link rel = "prefetch" href = "/assets/config.html-6Tbch0Rj.js" as = "script" > < link rel = "prefetch" href = "/assets/exception.html-BkmmPec8.js" as = "script" > < link rel = "prefetch" href = "/assets/log.html-XF7Fze52.js" as = "script" > < link rel = "prefetch" href = "/assets/mkdoc.html-DkukQHjl.js" as = "script" > < link rel = "prefetch" href = "/assets/utils.html-Bdl8GheN.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-BHgYdwA5.js" as = "script" > < link rel = "prefetch" href = "/assets/config.html-4EymchQy.js" as = "script" > < link rel = "prefetch" href = "/assets/fandq.html-TloOLC-e.js" as = "script" > < link rel = "prefetch" href = "/assets/install.html-CSZ_Blp2.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-VU24uxuB.js" as = "script" > < link rel = "prefetch" href = "/assets/dev_comm.html-CocVhTN6.js" as = "script" > < link rel = "prefetch" href = "/assets/dev_lyfunc.html-CVeHQ5_4.js" as = "script" > < link rel = "prefetch" href = "/assets/dev_lyplugin.html-B7WwnHH6.js" as = "script" > < link rel = "prefetch" href = "/assets/dev_resource_pack.html-DjH7aIuI.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-C_FJiA4q.js" as = "script" > < link rel = "prefetch" href = "/assets/plugin.html-D9leGLDt.js" as = "script" > < link rel = "prefetch" href = "/assets/resource.html-BqEbdx_Y.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-BucUg5Yg.js" as = "script" > < link rel = "prefetch" href = "/assets/agreement.html-D2uCcr1r.js" as = "script" > < link rel = "prefetch" href = "/assets/basic_command.html-B9-TxHBl.js" as = "script" > < link rel = "prefetch" href = "/assets/extra_command.html-9mP9wPW0.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-CCJkkdj0.js" as = "script" > < link rel = "prefetch" href = "/assets/lifespan.html-DEu1_4P8.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-BFIseyxQ.js" as = "script" > < link rel = "prefetch" href = "/assets/channel.html-4MgiWTk4.js" as = "script" > < link rel = "prefetch" href = "/assets/event.html-Wy-ptAuK.js" as = "script" > < link rel = "prefetch" href = "/assets/rpc.html-Phmlqb28.js" as = "script" > < link rel = "prefetch" href = "/assets/socks_channel.html-Dcwxnowc.js" as = "script" > < link rel = "prefetch" href = "/assets/storage.html-Bfj0YqWR.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-D3TarIMe.js" as = "script" > < link rel = "prefetch" href = "/assets/manager.html-DeYiMi3A.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-BQpa33d5.js" as = "script" > < link rel = "prefetch" href = "/assets/observer.html-BQsrnpPT.js" as = "script" > < link rel = "prefetch" href = "/assets/plugin.html-DdUwM3ao.js" as = "script" > < link rel = "prefetch" href = "/assets/index.html-tK9_GRC3.js" as = "script" > < link rel = "prefetch" href = "/assets/event.html-BR8_ZhNU.js" as = "script" > < link rel = "prefetch" href = "/assets/matcher.html-KBe9e6cu
2024-08-29 13:53:08 +08:00
< / head >
< body >
2024-08-29 14:24:11 +08:00
< div id = "app" > <!-- [ --> <!-- [ --> <!-- [ --> < span tabindex = "-1" > < / span > < a href = "#main-content" class = "vp-skip-link sr-only" > Skip to main content< / a > <!-- ] --> < div class = "theme-container has-toc" > <!-- [ --> < header id = "navbar" class = "vp-navbar" > < div class = "vp-navbar-start" > < button type = "button" class = "vp-toggle-sidebar-button" title = "Toggle Sidebar" > < span class = "icon" > < / span > < / button > <!-- [ --> <!-- --> <!-- ] --> <!-- [ --> < a class = "route-link vp-brand" href = "/en/" > < img class = "vp-nav-logo" src = "https://cdn.liteyuki.icu/static/img/liteyuki_icon_640.png" alt > <!-- --> < span class = "vp-site-name hide-in-pad" > LiteyukiBot< / span > < / a > <!-- ] --> <!-- [ --> <!-- --> <!-- ] --> < / div > < div class = "vp-navbar-center" > <!-- [ --> <!-- --> <!-- ] --> <!-- [ --> < nav class = "vp-nav-links" > < div class = "nav-item hide-in-mobile" > < a class = "route-link nav-link" href = "/en/" aria-label = "Home" > < span class = "font-icon icon fa-fw fa-sm fas fa-home" style = "" > < / span > Home<!-- --> < / a > < / div > < div class = "nav-item hide-in-mobile" > < a class = "route-link nav-link" href = "/en/deploy/" aria-label = "Deploy" > <!-- --> Deploy<!-- --> < / a > < / div > < div class = "nav-item hide-in-mobile" > < a class = "route-link nav-link" href = "/en/usage/" aria-label = "Usage" > <!-- --> Usage<!-- --> < / a > < / div > < div class = "nav-item hide-in-mobile" > < a class = "route-link nav-link" href = "/en/store/" aria-label = "Extensions" > <!-- --> Extensions<!-- --> < / a > < / div > < div class = "nav-item hide-in-mobile" > < a class = "route-link nav-link active" href = "/en/dev/" aria-label = "Contribute" > <!-- --> Contribute<!-- --> < / a > < / div > < / nav > <!-- ] --> <!-- [ --> <!-- --> <!-- ] --> < / div > < div class = "vp-navbar-end" > <!-- [ --> <!-- --> <!-- ] --> <!-- [ --> < div class = "nav-item" > < div class = "dropdown-wrapper i18n-dropdown" > < button type = "button" class = "dropdown-title" aria-label = "Select language" > <!-- [ --> < svg xmlns = "http://www.w3.org/2000/svg" class = "icon i18n-icon" viewBox = "0 0 1024 1024" fill = "currentColor" aria-label = "i18n icon" style = "width:1rem;height:1rem;vertical-align:middle;" > < path d = "M379.392 460.8 494.08 575.488l-42.496 102.4L307.2 532.48 138.24 701.44l-71.68-72.704L234.496 460.8l-45.056-45.056c-27.136-27.136-51.2-66.56-66.56-108.544h112.64c7.68 14.336 16.896 27.136 26.112 35.84l45.568 46.08 45.056-45.056C382.976 312.32 409.6 247.808 409.6 204.8H0V102.4h256V0h102.4v102.4h256v102.4H512c0 70.144-37.888 161.28-87.04 210.944L378.88 460.8zM576 870.4 512 1024H409.6l256-614.4H768l256 614.4H921.6l-64-153.6H576zM618.496 768h196.608L716.8 532.48 618.496 768z" > < / path > < / svg > <!-- ] --> < span class = "arrow" > < / span > < ul class = "nav-dropdown" > < li class = "dropdown-item" > < a class = "route-link nav-link" href = "/dev/api/comm/channel.html" aria-label = "简体中文" > <!-- --> 简体中文<!-- --> < / a > < / li > < li class = "dropdown-item" > < a class = "route-link nav-link active" href = "/en/dev/api/comm/channel.html" aria-label = "English" > <!-- --> English<!-- --> < / a > < / li > < / ul > < / button > < / div > < / div > < div class = "nav-item vp-repo" > < a class = "vp-repo-link" href = "https://github.com/LiteyukiStudio/LiteyukiBot" target = "_blank" rel = "noopener noreferrer" aria-label = "GitHub" > < svg xmlns = "http://www.w3.org/2000/svg" class = "icon github-icon" viewBox = "0 0 1024 1024" fill = "currentColor" aria-label = "github icon" style = "width:1.25rem;height:1.25rem;vertical-align:middle;" > < path d = "M511.957 21 . 333C241 . 024 21 . 333 21 . 333 240 . 981 21 . 333 512c0 216 . 832 140 . 544 400 . 725 335 . 574 465 . 664 24 . 49 4 . 395 32 . 256-10 . 07 32 . 256-23 . 083 0-11 . 69 . 256-44 . 245 0-85 . 205-136 . 448 29 . 61-164 . 736-64 . 64-164 . 736-64 . 64-22 . 315-56 . 704-54 . 4-71 . 765-54 . 4-71 . 765-44 . 587-30 . 464 3 . 285-29 . 824 3 . 285-29 . 824 49 . 195 3 . 413 75 . 179 50 . 517 75 . 179 50 . 517 43 . 776 75 . 008 114 . 816 53 . 333 142 . 762 40 . 79 4 . 523-31 . 66 17 . 152-53 . 377 31 . 19-65 . 537-108 . 971-12 . 458-223 . 488-54 . 485-223 . 488-242 . 602 0-53 . 547 19 . 114-97 . 323 50 . 517-131 . 67-5 . 035-12 . 33-21 . 93-62 . 293 4 . 779-129 . 834 0 0 41 . 258-13 . 184 134 . 912 50 . 346a469 . 803 469 . 803 0 0 1 122 . 88-16 . 554c41 . 642 . 213 83 . 626 5 . 632 122 . 88 16 . 554 93 . 653-63 . 488 134 . 784-50 . 346 134 . 784-50 . 346 26 . 752 67 . 541 9 . 898 117 . 504 4 . 864 129 . 834 31 . 402 34 . 347 50 . 474 78 . 123 50 . 474 131 . 67 0 188 . 586-114 . 73 230 . 016-224 . 042 242 . 09 17 . 578 15 . 232 33 . 578 44 . 672 33 . 578 90 . 454v135 . 85c0 13 . 142 7 . 936 27 . 606 32 . 854 22 . 87C862 . 25 912 . 597 1002 . 66
2024-08-29 13:53:08 +08:00
< span class = "token triple-quoted-string string" > " " "
设置通道实例
Args:
name: 通道名称
channel: 通道实例
" " " < / span >
< span class = "token keyword" > if< / span > < span class = "token keyword" > not< / span > < span class = "token builtin" > isinstance< / span > < span class = "token punctuation" > (< / span > channel< span class = "token punctuation" > ,< / span > Channel< span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > raise< / span > TypeError< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' channel_ must be an instance of Channel, < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > < span class = "token builtin" > type< / span > < span class = "token punctuation" > (< / span > channel< span class = "token punctuation" > )< / span > < span class = "token punctuation" > }< / span > < / span > < span class = "token string" > found' < / span > < / span > < 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 > name < span class = "token keyword" > in< / span > _channel< span class = "token punctuation" > :< / span >
< span class = "token keyword" > raise< / span > ValueError< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' Channel < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > name< span class = "token punctuation" > }< / span > < / span > < span class = "token string" > already exists' < / span > < / span > < span class = "token punctuation" > )< / span >
_channel< span class = "token punctuation" > [< / span > name< span class = "token punctuation" > ]< / span > < span class = "token operator" > =< / span > channel
< span class = "token keyword" > else< / span > < span class = "token punctuation" > :< / span >
channel_deliver_passive_channel< span class = "token punctuation" > .< / span > send< span class = "token punctuation" > (< / span > < span class = "token punctuation" > (< / span > < span class = "token string" > ' set_channel' < / span > < span class = "token punctuation" > ,< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > ' name' < / span > < span class = "token punctuation" > :< / span > name< span class = "token punctuation" > ,< / span > < span class = "token string" > ' channel_' < / span > < span class = "token punctuation" > :< / span > channel< 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 > < / div > < / details > < h3 id = "func-set-channels" tabindex = "-1" > < a class = "header-anchor" href = "#func-set-channels" > < span > < em > func< / em > < code > set_channels()< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 设置通道实例< / p > < p > < strong > Arguments< / strong > :< / p > < blockquote > < ul > < li > channels: 通道名称< / li > < / ul > < / blockquote > < details > < summary > < b > Source code< / 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_channels< / span > < span class = "token punctuation" > (< / span > channels< 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 > < span class = "token string" > ' Channel' < / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token triple-quoted-string string" > " " "
设置通道实例
Args:
channels: 通道名称
" " " < / span >
< span class = "token keyword" > for< / span > < span class = "token punctuation" > (< / span > name< span class = "token punctuation" > ,< / span > channel< span class = "token punctuation" > )< / span > < span class = "token keyword" > in< / span > channels< span class = "token punctuation" > .< / span > items< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
set_channel< span class = "token punctuation" > (< / span > name< span class = "token punctuation" > ,< / span > channel< 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 > < / div > < / details > < h3 id = "func-get-channel-channel" tabindex = "-1" > < a class = "header-anchor" href = "#func-get-channel-channel" > < span > < em > func< / em > < code > get_channel() -> Channel< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 获取通道实例< / p > < p > < strong > Arguments< / strong > :< / p > < blockquote > < ul > < li > name: 通道名称< / li > < / ul > < / blockquote > < details > < summary > < b > Source code< / 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_channel< / span > < span class = "token punctuation" > (< / span > name< 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" > > < / span > < span class = "token string" > ' Channel' < / span > < span class = "token punctuation" > :< / span >
< span class = "token triple-quoted-string string" > " " "
获取通道实例
Args:
name: 通道名称
Returns:
" " " < / span >
< span class = "token keyword" > if< / span > IS_MAIN_PROCESS< span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / span > _channel< span class = "token punctuation" > [< / span > name< 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 > Channel< 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" > ' recv_chan' < / span > < span class = "token punctuation" > )< / span >
channel_deliver_passive_channel< span class = "token punctuation" > .< / span > send< span class = "token punctuation" > (< / span > < span class = "token punctuation" > (< / span > < span class = "token string" > ' get_channel' < / span > < span class = "token punctuation" > ,< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > ' name' < / span > < span class = "token punctuation" > :< / span > name< span class = "token punctuation" > ,< / span > < span class = "token string" > ' recv_chan' < / 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 > < / div > < / details > < h3 id = "func-get-channels-dict-str-channel" tabindex = "-1" > < a class = "header-anchor" href = "#func-get-channels-dict-str-channel" > < span > < em > func< / em > < code > get_channels() -> dict[str, Channel]< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 获取通道实例< / p > < details > < summary > < b > Source code< / 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_channels< / span > < span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span > < span class = "token operator" > -< / span > < span class = "token operator" > > < / span > < span class = "token builtin" > dict< / span > < span class = "token punctuation" > [< / span > < span class = "token builtin" > str< / span > < span class = "token punctuation" > ,< / span > < span class = "token string" > ' Channel' < / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > :< / span >
< span class = "token triple-quoted-string string" > " " "
获取通道实例
Returns:
" " " < / span >
< span class = "token keyword" > if< / span > IS_MAIN_PROCESS< span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / span > _channel
< 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 > Channel< 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 string" > ' recv_chan' < / span > < span class = "token punctuation" > )< / span >
channel_deliver_passive_channel< span class = "token punctuation" > .< / span > send< span class = "token punctuation" > (< / span > < span class = "token punctuation" > (< / span > < span class = "token string" > ' get_channels' < / span > < span class = "token punctuation" > ,< / span > < span class = "token punctuation" > {< / span > < span class = "token string" > ' recv_chan' < / 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 > < / div > < / details > < h3 id = "channel-deliver-passive-channel-on-receive-filter-func-lambda-data-data-0-set-channel" tabindex = "-1" > < a class = "header-anchor" href = "#channel-deliver-passive-channel-on-receive-filter-func-lambda-data-data-0-set-channel" > < span > < code > @channel_deliver_passive_channel.on_receive(filter_func=lambda data: data[0] == ' set_channel' )< / code > < / span > < / a > < / h3 > < h3 id = "func-on-set-channel" tabindex = "-1" > < a class = "header-anchor" href = "#func-on-set-channel" > < span > < em > func< / em > < code > on_set_channel()< / code > < / span > < / a > < / h3 > < details > < summary > < b > Source code< / 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" > @channel_deliver_passive_channel< span class = "token punctuation" > .< / span > on_receive< / span > < span class = "token punctuation" > (< / span > filter_func< span class = "token operator" > =< / span > < span class = "token keyword" > lambda< / span > data< span class = "token punctuation" > :< / 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" > ' set_channel' < / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > def< / span > < span class = "token function" > on_set_channel< / 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 >
< span class = "token punctuation" > (< / span > name< span class = "token punctuation" > ,< / span > channel< span class = "token punctuation" > )< / span > < span class = "token operator" > =< / 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" > ' name' < / 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" > ' channel_' < / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span >
set_channel< span class = "token punctuation" > (< / span > name< span class = "token punctuation" > ,< / span > channel< 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 = "channel-deliver-passive-channel-on-receive-filter-func-lambda-data-data-0-get-channel" tabindex = "-1" > < a class = "header-anchor" href = "#channel-deliver-passive-channel-on-receive-filter-func-lambda-data-data-0-get-channel" > < span > < code > @channel_deliver_passive_channel.on_receive(filter_func=lambda data: data[0] == ' get_channel' )< / code > < / span > < / a > < / h3 > < h3 id = "func-on-get-channel" tabindex = "-1" > < a class = "header-anchor" href = "#func-on-get-channel" > < span > < em > func< / em > < code > on_get_channel()< / code > < / span > < / a > < / h3 > < details > < summary > < b > Source code< / 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" > @channel_deliver_passive_channel< span class = "token punctuation" > .< / span > on_receive< / span > < span class = "token punctuation" > (< / span > filter_func< span class = "token operator" > =< / span > < span class = "token keyword" > lambda< / span > data< span class = "token punctuation" > :< / 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" > ' get_channel' < / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > def< / span > < span class = "token function" > on_get_channel< / 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 >
< span class = "token punctuation" > (< / span > name< span class = "token punctuation" > ,< / span > recv_chan< span class = "token punctuation" > )< / span > < span class = "token operator" > =< / 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" > ' name' < / 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" > ' recv_chan' < / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span >
recv_chan< span class = "token punctuation" > .< / span > send< span class = "token punctuation" > (< / span > get_channel< span class = "token punctuation" > (< / span > name< 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 = "channel-deliver-passive-channel-on-receive-filter-func-lambda-data-data-0-get-channels" tabindex = "-1" > < a class = "header-anchor" href = "#channel-deliver-passive-channel-on-receive-filter-func-lambda-data-data-0-get-channels" > < span > < code > @channel_deliver_passive_channel.on_receive(filter_func=lambda data: data[0] == ' get_channels' )< / code > < / span > < / a > < / h3 > < h3 id = "func-on-get-channels" tabindex = "-1" > < a class = "header-anchor" href = "#func-on-get-channels" > < span > < em > func< / em > < code > on_get_channels()< / code > < / span > < / a > < / h3 > < details > < summary > < b > Source code< / 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" > @channel_deliver_passive_channel< span class = "token punctuation" > .< / span > on_receive< / span > < span class = "token punctuation" > (< / span > filter_func< span class = "token operator" > =< / span > < span class = "token keyword" > lambda< / span > data< span class = "token punctuation" > :< / 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" > ' get_channels' < / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > def< / span > < span class = "token function" > on_get_channels< / 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" > ' recv_chan' < / span > < span class = "token punctuation" > ]< / span >
recv_chan< span class = "token punctuation" > .< / span > send< span class = "token punctuation" > (< / span > get_channels< 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-channel-generic-t" tabindex = "-1" > < a class = "header-anchor" href = "#class-channel-generic-t" > < span > < strong > class< / strong > < code > Channel(Generic[T])< / code > < / span > < / a > < / h3 > < h3 id = "method-init-self-name-str-type-check-optional-bool-none" tabindex = "-1" > < a class = "header-anchor" href = "#method-init-self-name-str-type-check-optional-bool-none" > < span > < em > method< / em > < code > __init__(self, name: str, type_check: Optional[bool] = None)< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 初始化通道< / p > < p > < strong > Arguments< / strong > :< / p > < blockquote > < ul > < li > name: 通道ID< / li > < li > type_check: 是否开启类型检查, 若为空,则传入泛型默认开启,否则默认关闭< / li > < / ul > < / blockquote > < details > < summary > < b > Source code< / 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 > name< span class = "token punctuation" > :< / span > < span class = "token builtin" > str< / span > < span class = "token punctuation" > ,< / span > type_check< span class = "token punctuation" > :< / span > Optional< span class = "token punctuation" > [< / span > < span class = "token builtin" > bool< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > =< / span > < span class = "token boolean" > None< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token triple-quoted-string string" > " " "
初始化通道
Args:
name: 通道ID
type_check: 是否开启类型检查, 若为空,则传入泛型默认开启,否则默认关闭
" " " < / span >
< span class = "token punctuation" > (< / span > self< span class = "token punctuation" > .< / span > conn_send< span class = "token punctuation" > ,< / span > self< span class = "token punctuation" > .< / span > conn_recv< span class = "token punctuation" > )< / span > < span class = "token operator" > =< / span > Pipe< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span >
< span class = "token punctuation" > (< / span > self< span class = "token punctuation" > .< / span > _conn_send_inner< span class = "token punctuation" > ,< / span > self< span class = "token punctuation" > .< / span > _conn_recv_inner< span class = "token punctuation" > )< / span > < span class = "token operator" > =< / span > Pipe< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span >
self< span class = "token punctuation" > .< / span > _closed < span class = "token operator" > =< / span > < span class = "token boolean" > False< / span >
self< span class = "token punctuation" > .< / span > _on_main_receive_func_ids< span class = "token punctuation" > :< / span > < span class = "token builtin" > list< / span > < span class = "token punctuation" > [< / span > < span class = "token builtin" > int< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > =< / span > < span class = "token punctuation" > [< / span > < span class = "token punctuation" > ]< / span >
self< span class = "token punctuation" > .< / span > _on_sub_receive_func_ids< span class = "token punctuation" > :< / span > < span class = "token builtin" > list< / span > < span class = "token punctuation" > [< / span > < span class = "token builtin" > int< / span > < span class = "token punctuation" > ]< / span > < span class = "token operator" > =< / span > < span class = "token punctuation" > [< / span > < span class = "token punctuation" > ]< / span >
self< span class = "token punctuation" > .< / span > name< span class = "token punctuation" > :< / span > < span class = "token builtin" > str< / span > < span class = "token operator" > =< / span > name
self< span class = "token punctuation" > .< / span > is_receive_loop_running < span class = "token operator" > =< / span > < span class = "token boolean" > False< / span >
< span class = "token keyword" > if< / span > type_check < span class = "token keyword" > is< / span > < span class = "token boolean" > None< / span > < span class = "token punctuation" > :< / span >
type_check < span class = "token operator" > =< / span > self< span class = "token punctuation" > .< / span > _get_generic_type< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span > < span class = "token keyword" > is< / span > < span class = "token keyword" > not< / span > < span class = "token boolean" > None< / span >
< span class = "token keyword" > elif< / span > type_check< span class = "token punctuation" > :< / span >
< span class = "token keyword" > if< / span > self< span class = "token punctuation" > .< / span > _get_generic_type< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span > < span class = "token keyword" > is< / span > < span class = "token boolean" > None< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > raise< / span > TypeError< span class = "token punctuation" > (< / span > < span class = "token string" > ' Type hint is required for enforcing type check.' < / span > < span class = "token punctuation" > )< / span >
self< span class = "token punctuation" > .< / span > type_check < span class = "token operator" > =< / span > type_check
< span class = "token keyword" > if< / span > name < span class = "token keyword" > in< / span > _channel< span class = "token punctuation" > :< / span >
< span class = "token keyword" > raise< / span > ValueError< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' Channel < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > name< span class = "token punctuation" > }< / span > < / span > < span class = "token string" > already exists' < / span > < / span > < 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 > name < span class = "token keyword" > in< / span > _channel< span class = "token punctuation" > :< / span >
< span class = "token keyword" > raise< / span > ValueError< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' Channel < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > name< span class = "token punctuation" > }< / span > < / span > < span class = "token string" > already exists' < / span > < / span > < span class = "token punctuation" > )< / span >
_channel< span class = "token punctuation" > [< / span > name< span class = "token punctuation" > ]< / span > < span class = "token operator" > =< / span > self
logger< span class = "token punctuation" > .< / span > debug< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' Channel < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > name< span class = "token punctuation" > }< / span > < / span > < span class = "token string" > initialized in main process' < / span > < / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > else< / span > < span class = "token punctuation" > :< / span >
logger< span class = "token punctuation" > .< / span > debug< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' Channel < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > name< span class = "token punctuation" > }< / span > < / span > < span class = "token string" > initialized in sub process, should manually set in main process' < / span > < / 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 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-generic-type-self-optional-type" tabindex = "-1" > < a class = "header-anchor" href = "#method-get-generic-type-self-optional-type" > < span > < em > method< / em > < code > _get_generic_type(self) -> Optional[type]< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 获取通道传递泛型类型< / p > < p > < strong > Return< / strong > : Optional[type]: 泛型类型< / p > < details > < summary > < b > Source code< / 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_generic_type< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > )< / span > < span class = "token operator" > -< / span > < span class = "token operator" > > < / span > Optional< span class = "token punctuation" > [< / span > < span class = "token builtin" > type< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > :< / span >
< span class = "token triple-quoted-string string" > " " "
获取通道传递泛型类型
Returns:
Optional[type]: 泛型类型
" " " < / span >
< span class = "token keyword" > if< / span > < span class = "token builtin" > hasattr< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > ,< / span > < span class = "token string" > ' __orig_class__' < / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / span > get_args< span class = "token punctuation" > (< / span > self< span class = "token punctuation" > .< / span > __orig_class__< span class = "token punctuation" > )< / span > < span class = "token punctuation" > [< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ]< / span >
< span class = "token keyword" > return< / span > < span class = "token boolean" > None< / span >
2024-08-29 14:21:20 +08:00
< / 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-validate-structure-self-data-any-structure-type-bool" tabindex = "-1" > < a class = "header-anchor" href = "#method-validate-structure-self-data-any-structure-type-bool" > < span > < em > method< / em > < code > _validate_structure(self, data: Any, structure: type) -> bool< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 验证数据结构< / p > < p > < strong > Arguments< / strong > :< / p > < blockquote > < ul > < li > data: 数据< / li > < li > structure: 结构< / li > < / ul > < / blockquote > < p > < strong > Return< / strong > : bool: 是否通过验证< / p > < details > < summary > < b > Source code< / 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" > _validate_structure< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > ,< / span > data< span class = "token punctuation" > :< / span > Any< span class = "token punctuation" > ,< / span > structure< span class = "token punctuation" > :< / span > < span class = "token builtin" > type< / span > < span class = "token punctuation" > )< / span > < span class = "token operator" > -< / span > < span class = "token operator" > > < / span > < span class = "token builtin" > bool< / span > < span class = "token punctuation" > :< / span >
2024-08-29 13:53:08 +08:00
< span class = "token triple-quoted-string string" > " " "
验证数据结构
Args:
data: 数据
structure: 结构
Returns:
bool: 是否通过验证
" " " < / span >
< span class = "token keyword" > if< / span > < span class = "token builtin" > isinstance< / span > < span class = "token punctuation" > (< / span > structure< span class = "token punctuation" > ,< / span > < span class = "token builtin" > type< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / span > < span class = "token builtin" > isinstance< / span > < span class = "token punctuation" > (< / span > data< span class = "token punctuation" > ,< / span > structure< span class = "token punctuation" > )< / span >
< span class = "token keyword" > elif< / span > < span class = "token builtin" > isinstance< / span > < span class = "token punctuation" > (< / span > structure< span class = "token punctuation" > ,< / span > < span class = "token builtin" > tuple< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > if< / span > < span class = "token keyword" > not< / span > < span class = "token builtin" > isinstance< / 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 keyword" > or< / span > < span class = "token builtin" > len< / span > < span class = "token punctuation" > (< / span > data< span class = "token punctuation" > )< / span > < span class = "token operator" > !=< / span > < span class = "token builtin" > len< / span > < span class = "token punctuation" > (< / span > structure< span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / span > < span class = "token boolean" > False< / span >
< span class = "token keyword" > return< / span > < span class = "token builtin" > all< / span > < span class = "token punctuation" > (< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > .< / span > _validate_structure< span class = "token punctuation" > (< / span > d< span class = "token punctuation" > ,< / span > s< span class = "token punctuation" > )< / span > < span class = "token keyword" > for< / span > < span class = "token punctuation" > (< / span > d< span class = "token punctuation" > ,< / span > s< span class = "token punctuation" > )< / span > < span class = "token keyword" > in< / span > < span class = "token builtin" > zip< / span > < span class = "token punctuation" > (< / span > data< span class = "token punctuation" > ,< / span > structure< span class = "token punctuation" > )< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > elif< / span > < span class = "token builtin" > isinstance< / span > < span class = "token punctuation" > (< / span > structure< span class = "token punctuation" > ,< / span > < span class = "token builtin" > list< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > if< / span > < span class = "token keyword" > not< / span > < span class = "token builtin" > isinstance< / span > < span class = "token punctuation" > (< / span > data< span class = "token punctuation" > ,< / span > < span class = "token builtin" > list< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / span > < span class = "token boolean" > False< / span >
< span class = "token keyword" > return< / span > < span class = "token builtin" > all< / span > < span class = "token punctuation" > (< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > .< / span > _validate_structure< span class = "token punctuation" > (< / span > d< span class = "token punctuation" > ,< / span > structure< span class = "token punctuation" > [< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span > < span class = "token keyword" > for< / span > d < span class = "token keyword" > in< / span > data< span class = "token punctuation" > )< / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > elif< / span > < span class = "token builtin" > isinstance< / span > < span class = "token punctuation" > (< / span > structure< span class = "token punctuation" > ,< / span > < span class = "token builtin" > dict< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > if< / span > < span class = "token keyword" > not< / span > < span class = "token builtin" > isinstance< / span > < span class = "token punctuation" > (< / span > data< span class = "token punctuation" > ,< / span > < span class = "token builtin" > dict< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / span > < span class = "token boolean" > False< / span >
< span class = "token keyword" > return< / span > < span class = "token builtin" > all< / span > < span class = "token punctuation" > (< / span > < span class = "token punctuation" > (< / span > k < span class = "token keyword" > in< / span > data < span class = "token keyword" > and< / span > self< span class = "token punctuation" > .< / span > _validate_structure< span class = "token punctuation" > (< / span > data< span class = "token punctuation" > [< / span > k< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span > structure< span class = "token punctuation" > [< / span > k< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span > < span class = "token keyword" > for< / span > k < span class = "token keyword" > in< / span > structure< span class = "token punctuation" > )< / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > return< / 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 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-send-self-data-t" tabindex = "-1" > < a class = "header-anchor" href = "#method-send-self-data-t" > < span > < em > method< / em > < code > send(self, data: T)< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 发送数据,发送函数为同步函数,没有异步的必要< / p > < p > < strong > Arguments< / strong > :< / p > < blockquote > < ul > < li > data: 数据< / li > < / ul > < / blockquote > < details > < summary > < b > Source code< / 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" > send< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > ,< / span > data< span class = "token punctuation" > :< / span > T< span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token triple-quoted-string string" > " " "
发送数据,发送函数为同步函数,没有异步的必要
Args:
data: 数据
" " " < / span >
< span class = "token keyword" > if< / span > self< span class = "token punctuation" > .< / span > type_check< span class = "token punctuation" > :< / span >
_type < span class = "token operator" > =< / span > self< span class = "token punctuation" > .< / span > _get_generic_type< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > if< / span > _type < span class = "token keyword" > is< / span > < span class = "token keyword" > not< / span > < span class = "token boolean" > None< / span > < span class = "token keyword" > and< / span > < span class = "token punctuation" > (< / span > < span class = "token keyword" > not< / span > self< span class = "token punctuation" > .< / span > _validate_structure< span class = "token punctuation" > (< / span > data< span class = "token punctuation" > ,< / span > _type< span class = "token punctuation" > )< / span > < span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > raise< / span > TypeError< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' Data must be an instance of < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > _type< span class = "token punctuation" > }< / span > < / span > < span class = "token string" > , < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > < span class = "token builtin" > type< / span > < span class = "token punctuation" > (< / span > data< span class = "token punctuation" > )< / span > < span class = "token punctuation" > }< / span > < / span > < span class = "token string" > found' < / span > < / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > if< / span > self< span class = "token punctuation" > .< / span > _closed< span class = "token punctuation" > :< / span >
< span class = "token keyword" > raise< / span > RuntimeError< span class = "token punctuation" > (< / span > < span class = "token string" > ' Cannot send to a closed channel_' < / span > < span class = "token punctuation" > )< / span >
self< span class = "token punctuation" > .< / span > conn_send< 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 class = "line-number" > < / div > < div class = "line-number" > < / div > < / div > < / div > < / details > < h3 id = "method-receive-self-t" tabindex = "-1" > < a class = "header-anchor" href = "#method-receive-self-t" > < span > < em > method< / em > < code > receive(self) -> T< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 同步接收数据,会阻塞线程< / p > < details > < summary > < b > Source code< / 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" > receive< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > )< / span > < span class = "token operator" > -< / span > < span class = "token operator" > > < / span > T< span class = "token punctuation" > :< / span >
< span class = "token triple-quoted-string string" > " " "
同步接收数据,会阻塞线程
Args:
" " " < / span >
< span class = "token keyword" > if< / span > self< span class = "token punctuation" > .< / span > _closed< span class = "token punctuation" > :< / span >
< span class = "token keyword" > raise< / span > RuntimeError< span class = "token punctuation" > (< / span > < span class = "token string" > ' Cannot receive from a closed channel_' < / 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 > self< span class = "token punctuation" > .< / span > conn_recv< span class = "token punctuation" > .< / span > recv< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > return< / span > data
< / 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 = "async-method-async-receive-self-t" tabindex = "-1" > < a class = "header-anchor" href = "#async-method-async-receive-self-t" > < span > < em > async method< / em > < code > async_receive(self) -> T< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 异步接收数据,会挂起等待< / p > < details > < summary > < b > Source code< / 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" > async_receive< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > )< / span > < span class = "token operator" > -< / span > < span class = "token operator" > > < / span > T< span class = "token punctuation" > :< / span >
< span class = "token triple-quoted-string string" > " " "
异步接收数据,会挂起等待
" " " < / span >
< span class = "token keyword" > print< / span > < span class = "token punctuation" > (< / span > < span class = "token string" > ' 等待接收数据' < / span > < span class = "token punctuation" > )< / span >
loop < span class = "token operator" > =< / span > asyncio< span class = "token punctuation" > .< / span > get_running_loop< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span >
data < span class = "token operator" > =< / span > < span class = "token keyword" > await< / span > loop< span class = "token punctuation" > .< / span > run_in_executor< span class = "token punctuation" > (< / span > < span class = "token boolean" > None< / span > < span class = "token punctuation" > ,< / span > self< span class = "token punctuation" > .< / span > receive< span class = "token punctuation" > )< / span >
< span class = "token keyword" > print< / span > < span class = "token punctuation" > (< / span > < span class = "token string" > ' 接收到数据' < / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > return< / span > data
2024-08-29 14:21:20 +08:00
< / 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 = "method-on-receive-self-filter-func-optional-filter-func-none-callable-callable-t-any-callable-t-any" tabindex = "-1" > < a class = "header-anchor" href = "#method-on-receive-self-filter-func-optional-filter-func-none-callable-callable-t-any-callable-t-any" > < span > < em > method< / em > < code > on_receive(self, filter_func: Optional[FILTER_FUNC] = None) -> Callable[[Callable[[T], Any]], Callable[[T], Any]]< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 接收数据并执行函数< / p > < p > < strong > Arguments< / strong > :< / p > < blockquote > < ul > < li > filter_func: 过滤函数, 为None则不过滤< / li > < / ul > < / blockquote > < p > < strong > Return< / strong > : 装饰器,装饰一个函数在接收到数据后执行< / p > < details > < summary > < b > Source code< / 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_receive< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > ,< / span > filter_func< span class = "token punctuation" > :< / span > Optional< span class = "token punctuation" > [< / span > FILTER_FUNC< 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" > > < / span > Callable< span class = "token punctuation" > [< / span > < span class = "token punctuation" > [< / span > Callable< span class = "token punctuation" > [< / span > < span class = "token punctuation" > [< / span > T< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span > Any< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span > Callable< span class = "token punctuation" > [< / span > < span class = "token punctuation" > [< / span > T< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span > Any< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > :< / span >
2024-08-29 13:53:08 +08:00
< span class = "token triple-quoted-string string" > " " "
接收数据并执行函数
Args:
filter_func: 过滤函数, 为None则不过滤
Returns:
装饰器,装饰一个函数在接收到数据后执行
" " " < / 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" > ' on_receive can only be used in main process' < / 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 > Callable< span class = "token punctuation" > [< / span > < span class = "token punctuation" > [< / span > T< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span > Any< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > )< / span > < span class = "token operator" > -< / span > < span class = "token operator" > > < / span > Callable< span class = "token punctuation" > [< / span > < span class = "token punctuation" > [< / span > T< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span > Any< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > global< / span > _func_id
< 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 > T< span class = "token punctuation" > )< / span > < span class = "token operator" > -< / span > < span class = "token operator" > > < / span > Any< span class = "token punctuation" > :< / span >
< span class = "token keyword" > if< / span > filter_func < span class = "token keyword" > is< / span > < span class = "token keyword" > not< / span > < span class = "token boolean" > None< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > if< / span > is_coroutine_callable< span class = "token punctuation" > (< / span > filter_func< span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > if< / span > < span class = "token keyword" > not< / span > < span class = "token keyword" > await< / span > filter_func< span class = "token punctuation" > (< / span > data< span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / span >
< span class = "token keyword" > elif< / span > < span class = "token keyword" > not< / span > filter_func< span class = "token punctuation" > (< / span > data< span class = "token punctuation" > )< / span > < span class = "token punctuation" > :< / span >
< span class = "token keyword" > return< / 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" > return< / 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 >
< span class = "token keyword" > return< / span > func< span class = "token punctuation" > (< / span > data< span class = "token punctuation" > )< / span >
_callback_funcs< span class = "token punctuation" > [< / span > _func_id< span class = "token punctuation" > ]< / span > < span class = "token operator" > =< / span > wrapper
< span class = "token keyword" > if< / span > IS_MAIN_PROCESS< span class = "token punctuation" > :< / span >
self< span class = "token punctuation" > .< / span > _on_main_receive_func_ids< span class = "token punctuation" > .< / span > append< span class = "token punctuation" > (< / span > _func_id< span class = "token punctuation" > )< / span >
< span class = "token keyword" > else< / span > < span class = "token punctuation" > :< / span >
self< span class = "token punctuation" > .< / span > _on_sub_receive_func_ids< span class = "token punctuation" > .< / span > append< span class = "token punctuation" > (< / span > _func_id< span class = "token punctuation" > )< / span >
_func_id < span class = "token operator" > +=< / span > < span class = "token number" > 1< / span >
< span class = "token keyword" > return< / span > func
< 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 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-run-on-receive-funcs-self-data-any" tabindex = "-1" > < a class = "header-anchor" href = "#async-method-run-on-receive-funcs-self-data-any" > < span > < em > async method< / em > < code > _run_on_receive_funcs(self, data: Any)< / code > < / span > < / a > < / h3 > < p > < strong > Description< / strong > : 运行接收函数< / p > < p > < strong > Arguments< / strong > :< / p > < blockquote > < ul > < li > data: 数据< / li > < / ul > < / blockquote > < details > < summary > < b > Source code< / 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" > _run_on_receive_funcs< / span > < span class = "token punctuation" > (< / span > self< 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" > " " "
运行接收函数
Args:
data: 数据
" " " < / span >
< span class = "token keyword" > if< / span > IS_MAIN_PROCESS< span class = "token punctuation" > :< / span >
< span class = "token punctuation" > [< / span > asyncio< span class = "token punctuation" > .< / span > create_task< span class = "token punctuation" > (< / span > _callback_funcs< span class = "token punctuation" > [< / span > func_id< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > (< / span > data< span class = "token punctuation" > )< / span > < span class = "token punctuation" > )< / span > < span class = "token keyword" > for< / span > func_id < span class = "token keyword" > in< / span > self< span class = "token punctuation" > .< / span > _on_main_receive_func_ids< span class = "token punctuation" > ]< / span >
< span class = "token keyword" > else< / span > < span class = "token punctuation" > :< / span >
< span class = "token punctuation" > [< / span > asyncio< span class = "token punctuation" > .< / span > create_task< span class = "token punctuation" > (< / span > _callback_funcs< span class = "token punctuation" > [< / span > func_id< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > (< / span > data< span class = "token punctuation" > )< / span > < span class = "token punctuation" > )< / span > < span class = "token keyword" > for< / span > func_id < span class = "token keyword" > in< / span > self< span class = "token punctuation" > .< / span > _on_sub_receive_func_ids< 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 = "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 > Description< / strong > : 开始接收数据 会自动判断主进程和子进程,需要在对应进程都调度一次< / p > < details > < summary > < b > Source code< / 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" > " " "
开始接收数据
会自动判断主进程和子进程,需要在对应进程都调度一次
" " " < / span >
< span class = "token keyword" > if< / span > < span class = "token builtin" > len< / span > < span class = "token punctuation" > (< / span > self< span class = "token punctuation" > .< / span > _on_main_receive_func_ids< span class = "token punctuation" > )< / span > < span class = "token operator" > ==< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > :< / span >
logger< span class = "token punctuation" > .< / span > warning< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' No on_receive function registered for < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > self< span class = "token punctuation" > .< / span > name< span class = "token punctuation" > }< / span > < / span > < span class = "token string" > ' < / span > < / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > return< / span >
self< span class = "token punctuation" > .< / span > is_receive_loop_running < span class = "token operator" > =< / span > < span class = "token boolean" > True< / span >
logger< span class = "token punctuation" > .< / span > debug< span class = "token punctuation" > (< / span > < span class = "token string-interpolation" > < span class = "token string" > f' Starting receive loop for < / span > < span class = "token interpolation" > < span class = "token punctuation" > {< / span > self< span class = "token punctuation" > .< / span > name< span class = "token punctuation" > }< / span > < / span > < span class = "token string" > ' < / span > < / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > while< / span > < span class = "token keyword" > not< / span > self< span class = "token punctuation" > .< / span > _closed< span class = "token punctuation" > :< / span >
data < span class = "token operator" > =< / span > < span class = "token keyword" > await< / span > self< span class = "token punctuation" > .< / span > async_receive< span class = "token punctuation" > (< / span > < span class = "token punctuation" > )< / span >
< span class = "token keyword" > await< / span > self< span class = "token punctuation" > .< / span > _run_on_receive_funcs< span class = "token punctuation" > (< / span > data< span class = "token punctuation" > )< / span >
2024-08-29 14:21:20 +08:00
< / 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 > < / div > < / details > < h3 id = "var-sync-on-receive-func-callable-t-any" tabindex = "-1" > < a class = "header-anchor" href = "#var-sync-on-receive-func-callable-t-any" > < span > < em > < strong > var< / strong > < / em > < code > SYNC_ON_RECEIVE_FUNC = Callable[[T], Any]< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > TypeAlias< / code > < / li > < / ul > < h3 id = "var-async-on-receive-func-callable-t-coroutine-any-any-any" tabindex = "-1" > < a class = "header-anchor" href = "#var-async-on-receive-func-callable-t-coroutine-any-any-any" > < span > < em > < strong > var< / strong > < / em > < code > ASYNC_ON_RECEIVE_FUNC = Callable[[T], Coroutine[Any, Any, Any]]< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > TypeAlias< / code > < / li > < / ul > < h3 id = "var-on-receive-func-sync-on-receive-func-async-on-receive-func" tabindex = "-1" > < a class = "header-anchor" href = "#var-on-receive-func-sync-on-receive-func-async-on-receive-func" > < span > < em > < strong > var< / strong > < / em > < code > ON_RECEIVE_FUNC = SYNC_ON_RECEIVE_FUNC | ASYNC_ON_RECEIVE_FUNC< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > TypeAlias< / code > < / li > < / ul > < h3 id = "var-sync-filter-func-callable-t-bool" tabindex = "-1" > < a class = "header-anchor" href = "#var-sync-filter-func-callable-t-bool" > < span > < em > < strong > var< / strong > < / em > < code > SYNC_FILTER_FUNC = Callable[[T], bool]< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > TypeAlias< / code > < / li > < / ul > < h3 id = "var-async-filter-func-callable-t-coroutine-any-any-bool" tabindex = "-1" > < a class = "header-anchor" href = "#var-async-filter-func-callable-t-coroutine-any-any-bool" > < span > < em > < strong > var< / strong > < / em > < code > ASYNC_FILTER_FUNC = Callable[[T], Coroutine[Any, Any, bool]]< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > TypeAlias< / code > < / li > < / ul > < h3 id = "var-filter-func-sync-filter-func-async-filter-func" tabindex = "-1" > < a class = "header-anchor" href = "#var-filter-func-sync-filter-func-async-filter-func" > < span > < em > < strong > var< / strong > < / em > < code > FILTER_FUNC = SYNC_FILTER_FUNC | ASYNC_FILTER_FUNC< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > TypeAlias< / code > < / li > < / ul > < h3 id = "var-func-id-0" tabindex = "-1" > < a class = "header-anchor" href = "#var-func-id-0" > < span > < em > < strong > var< / strong > < / em > < code > _func_id = 0< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > int< / code > < / li > < / ul > < h3 id = "var-channel" tabindex = "-1" > < a class = "header-anchor" href = "#var-channel" > < span > < em > < strong > var< / strong > < / em > < code > _channel = {}< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > dict[str, ' Channel' ]< / code > < / li > < / ul > < h3 id = "var-callback-funcs" tabindex = "-1" > < a class = "header-anchor" href = "#var-callback-funcs" > < span > < em > < strong > var< / strong > < / em > < code > _callback_funcs = {}< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > dict[int, ON_RECEIVE_FUNC]< / code > < / li > < / ul > < h3 id = "var-active-channel-channel-name-active-channel" tabindex = "-1" > < a class = "header-anchor" href = "#var-active-channel-channel-name-active-channel" > < span > < em > < strong > var< / strong > < / em > < code > active_channel = Channel(name=' active_channel' )< / code > < / span > < / a > < / h3 > < ul > < li > < p > < strong > Type< / strong > : < code > Channel< / code > < / p > < / li > < li > < p > < strong > Description< / strong > : 子进程可用的主动和被动通道< / p > < / li > < / ul > < h3 id = "var-passive-channel-channel-name-passive-channel" tabindex = "-1" > < a class = "header-anchor" href = "#var-passive-channel-channel-name-passive-channel" > < span > < em > < strong > var< / strong > < / em > < code > passive_channel = Channel(name=' passive_channel' )< / code > < / span > < / a > < / h3 > < ul > < li > < strong > Type< / strong > : < code > Channel< / code > < / li > < / ul > < h3 id = "var-publish-channel-channel-name-publish-channel" tabindex = "-1" > < a class = "header-anchor" href = "#v
2024-08-29 14:24:11 +08:00
< script type = "module" src = "/assets/app-gnbtOU7f.js" defer > < / script >
2024-08-29 13:53:08 +08:00
< / body >
< / html >