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 開発サーバーには問題が残っています。