代码之家  ›  专栏  ›  技术社区  ›  Thomas

如何从工作线程导入Python异步模块?

  •  4
  • Thomas  · 技术社区  · 15 年前

    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
    

    我找到的一个解决办法是 import async settings.py ,显然是在主线程上导入的。然而,这需要在每次安装的基础上完成,所以这对我的Django应用程序的用户不是很好。

    我尝试捕获异常,但是引发异常的导入没有完全完成,因此下一步 导入异步 也会失败。


    更新:我注意到Apache的mod\uwsgi足够聪明,可以忽略 signal 电话:

    [Tue Sep 07 19:53:11 2010] [warn] mod_wsgi (pid=28595): Callback registration for signal 2 ignored.
    

    不过,Django开发服务器仍然存在问题。

    1 回复  |  直到 15 年前
        1
  •  0
  •   synthesizerpatel    15 年前

    如果您从git中提取最新的异步代码,我怀疑这将为您修复,并且在 patch

    推荐文章