gpt4 book ai didi

python - 如何从工作线程导入 Python 异步模块?

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:17 25 4
gpt4 key购买 nike

我正在使用 GitPython package从 Python 访问 Git 存储库。这将拉入 async package .在 async/__init__.py 中,会发生以下情况:

def _init_signals():
"""Assure we shutdown our threads correctly when being interrupted"""
import signal
# ...
signal.signal(signal.SIGINT, thread_interrupt_handler)

_init_signals()

如果所有内容都在主线程中,这会很好地工作。然而,当 git 的第一次导入(以及 async)发生在另一个线程上时,事情变得很糟糕:

ValueError: signal only works in main thread

由于所有这些都在 Django 框架内运行,我无法控制线程。

我发现的一种解决方法是将 import async 放入 settings.py 中,它(显然)是在主线程中导入的。但是,这需要在每次安装的基础上完成,因此对我的 Django 应用程序的用户来说不是很好。

我 try catch 异常,但是引发异常的导入没有完全完成,因此下一个 import async 也会失败。

你能想出任何半途而废的方法来解决这个问题吗?


更新:我注意到 Apache 的 mod_wsgi 足够聪明,可以忽略 signal 调用:

[Tue Sep 07 19:53:11 2010] [warn] mod_wsgi (pid=28595): Callback registration for signal 2 ignored.

不过,问题仍然出在 Django 开发服务器上。

最佳答案

如果你从 git 中提取最新的异步代码,我怀疑这会为你修复,并在 patch 中被称为非 fatal error 。

关于python - 如何从工作线程导入 Python 异步模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3657732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com