5

我正在使用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 asyncinto 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 开发服务器上。

4

1 回答 1

0

如果您从 git 中提取最新的异步代码,我怀疑这将为您修复并在补丁中被称为非致命错误

于 2010-09-20T07:02:07.477 回答