我正在使用GitPython 包从 Python 访问 Git 存储库。这会引入async 包。在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 框架内运行,因此我无法控制线程。
我发现的一种解决方法是 put import async
into settings.py
,它(显然)是在主线程上导入的。但是,这需要在每次安装的基础上完成,所以它对我的 Django 应用程序的用户不是很好。
我尝试捕获异常,但引发异常的导入并未完全完成,因此下一个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 开发服务器上。