我正在使用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应用程序的用户来说不是很好。
我尝试捕获异常,但引发异常的导入未完全完成,因此下一个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开发服务器上。