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 フレームワーク内で実行されるため、スレッドを制御することはできません。

私が見つけた 1 つの回避策は、(明らかに) メイン スレッドにインポートされている に配置import asyncすることです。settings.pyただし、これはインストールごとに行う必要があるため、私の Django アプリのユーザーにとってはあまり良いことではありません。

例外をキャッチしようとしましたが、例外が発生したインポートが完全に完了していないため、次import asyncも失敗します。

この問題を回避/ハッキングする中途半端な方法を考えられますか?


signal更新: Apache の mod_wsgi は呼び出しを無視するほど賢いことに気付きました:

[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 に答える