线程中的服务器(Python3.9.0+aiohttp):RuntimeError:关闭后无法注册atexit

2024-01-22

这段代码(在线程中运行的最小服务器,代码取自here https://stackoverflow.com/questions/51610074/how-to-run-an-aiohttp-server-in-a-thread)在 Python3.8.3 上工作正常,但在 Python3.9.0 上会引发错误消息:

import asyncio
import threading
from aiohttp import web


def aiohttp_server():
    def say_hello(request):
        return web.Response(text='Hello, world')

    app = web.Application()
    app.add_routes([web.get('/', say_hello)])
    runner = web.AppRunner(app)
    return runner


def run_server(runner):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(runner.setup())
    site = web.TCPSite(runner, 'localhost', 8080)
    loop.run_until_complete(site.start())
    loop.run_forever()


t = threading.Thread(target=run_server, args=(aiohttp_server(),))
t.start()

错误信息:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/home/alkhinoos/nikw/nikw/z2.py", line 21, in run_server
    loop.run_until_complete(site.start())
  File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/lib/python3.9/site-packages/aiohttp/web_runner.py", line 121, in start
    self._server = await loop.create_server(
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1460, in create_server
    infos = await tasks.gather(*fs, loop=self)
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1400, in _create_server_getaddrinfo
    infos = await self._ensure_resolved((host, port), family=family,
  File "/usr/lib/python3.9/asyncio/base_events.py", line 1396, in _ensure_resolved
    return await loop.getaddrinfo(host, port, family=family, type=type,
  File "/usr/lib/python3.9/asyncio/base_events.py", line 856, in getaddrinfo
    return await self.run_in_executor(
  File "/usr/lib/python3.9/asyncio/base_events.py", line 809, in run_in_executor
    executor = concurrent.futures.ThreadPoolExecutor(
  File "/usr/lib/python3.9/concurrent/futures/__init__.py", line 49, in __getattr__
    from .thread import ThreadPoolExecutor as te
  File "/usr/lib/python3.9/concurrent/futures/thread.py", line 37, in <module>
    threading._register_atexit(_python_exit)
  File "/usr/lib/python3.9/threading.py", line 1374, in _register_atexit
    raise RuntimeError("can't register atexit after shutdown")
RuntimeError: can't register atexit after shutdown

这是怎么回事 ? Python 3.9.1 也出现同样的问题。 Python 3.9.2 解决了这个问题吗?或许这里有一个相关问题 https://bugs.python.org/issue42647.


正如 Python 手册中提到的 -线程对象 https://docs.python.org/3/library/threading.html#thread-objects

其他线程可以调用一个线程的 join() 方法。这会阻塞调用线程,直到调用 join() 方法的线程终止。

打电话后t.start()在主线程中,主线程将退出。然后该过程结束。

如果你想永远运行子线程或者直到它退出,你应该调用t.join()在主线程之后t.start().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程中的服务器(Python3.9.0+aiohttp):RuntimeError:关闭后无法注册atexit 的相关文章

随机推荐

  • 如何检查引用的程序集在运行时是否可用?

    我正在创建一个简单的 独立的 net winforms 应用程序 它引用了程序集Microsoft SqlServer SqlWmiManagement Net Framework 4 的版本可能存在或不存在于客户端计算机上 如果该程序集不
  • 如何使用 es6 import 加载 emscripten 生成的模块?

    我正在尝试导入使用 emscripten 生成的模块作为 es6 模块 我正在尝试与基本示例 https kripken github io emscripten site docs porting connecting cpp and j
  • 跨多列排序 (Perl)

    对于以下代码 我将如何对多个列进行排序 目前 代码 1 得到一个 lista 中的文件数 directory2 使用正则表达式获取 fileName fileLocation and fileSize对于中的每个元素 list3 将 2 中
  • 数据注释验证属性中的 string.Format

    有没有办法使用格式化字符串而不是直接常量来设置数据注释消息 我需要像下面的代码一样设置必填字段 ErrorMessage 但它给了我一个错误 Required ErrorMessage string Format SystemMessage
  • Hyperledger Composer 点对点连接未建立

    我们使用 Hyperledger Composer 建立了一个业务网络 并通过创建对等点来创建参与者卡 当我们在导入参与者卡后尝试将对等方连接到本地的另一台计算机时 我收到以下错误 错误 尝试登录并获取用户上下文时出错 错误 尝试时出错 注
  • 运行 GO111MODULE=on go install 。 ./cmd/... 在云初始化中

    我有一个使用 cloud init 部署的 bash 脚本 我的 bash 脚本包含以下部分代码 GO111MODULE on go install cmd 当直接在已部署服务器的终端中运行我的 bash 脚本时 它按预期工作 但是当我在云
  • 我应该如何管理基于 Xml 的文档的不同不兼容格式

    我有一个应用程序 它以基于 Xml 的格式保存文档 例如 Word 文档 目前 从 xsd 文件生成的 C 类用于读取 写入文档格式 一切都很好 直到最近我不得不更改以下格式 该文件 我担心的是我的应用程序的未来版本的向后兼容性need能够
  • Ionic:如何不堆叠多个 toast 通知?

    我得到了以下 Ionic 代码片段 用于在工业应用程序中显示警报 错误 showError message string let toast this toastController create message message posit
  • Phpunit骨架生成器找不到扩展类

    我有一个基于 Zend Framework 的应用程序 我尝试使用 phpunit 生成测试用例的框架 Phpunit 似乎无法找到我尝试生成的类的父类 phpunit skeleton test Default Model Person
  • TFS 构建期间未找到程序集

    遇到问题的是项目在本地编译得很好 但 TFS 构建报告找不到程序集 日志文件将显示 2 gt C 程序文件 x86 MSBuild 12 0 bin amd64 Microsoft Common CurrentVersion targets
  • 如何将列聚合到 JSON 数组中?

    如何转换如下数据以便将数据存储在 ElasticSearch 中 这是一个 bean 数据集 我将按产品将其聚合到 JSON 数组中 List
  • 使用 MSBuild 从命令行生成用于 ClickOnce 部署的 setup.exe

    我有一个 MSBuild 脚本 用于构建 Windows 窗体应用程序 生成应用程序清单并对其进行签名 然后生成部署清单 该脚本还为我生成publish htm 文件 现在我需要生成 setup exe 文件 到目前为止我还无法弄清楚 VS
  • 如何在Python中使用带有字符异常的多行DOTALL

    我必须在 python 中找到多线模式 所以我使用正则表达式中的 DOTALL 但它发现的内容超出了我的需要 样本文件 if condition 1 some text some text if condition 1 condition
  • 我什么时候应该使用 $wpdb->prepare(如果有的话)?

    我很难弄清楚是否应该使用 wpdb gt prepare我在 WordPress 中进行数据库查询 以防止 SQL 注入等情况 The wpdb 法典 https codex wordpress org Class Reference wp
  • 如何从私有工作组队列接收消息

    我在远程计算机上有一个私有队列 每个人和匿名登录都可以完全访问 尝试接收时会产生以下代码并出错 var qpath FormatName DIRECT TCP xx xx xx xx PRIVATE QueueName var q new
  • 使用 postgresql 查询结果进行字符串替换

    我有一个查询 它总是只返回一个元素作为结果 我想将此查询的结果附加到一个字符串中 我可以使用该字符串进行进一步处理 Example select id from ids where some condition 我想将此 id 附加到字符串
  • simple_form 与 bootstrap 3 的集成

    我已将 bootstrap 更新到版本 3 除了 simple form gem 生成的表单之外 一切正常 我不知道如何将这两者整合在一起 我在 github 项目存储库中也找不到任何有用的建议 那么有人能为我提供解决方案吗 这里有一篇博客
  • 从右到左 TListView

    我正在对 tlistview 进行编程 以便它从右到左显示其列 以便正确显示希伯来语文本 我在表单的创 建方法中使用以下代码 其中 lv 是列表视图 SetWindowLong lv Handle GWL EXSTYLE GetWindow
  • 在 AS3 中动态创建多个只读属性

    我有一堂课目前非常混乱 重复 public class AvFramework extends Object vars private var handler AvHandler private var keyboard AvKeyboar
  • 线程中的服务器(Python3.9.0+aiohttp):RuntimeError:关闭后无法注册atexit

    这段代码 在线程中运行的最小服务器 代码取自here https stackoverflow com questions 51610074 how to run an aiohttp server in a thread 在 Python3