Signal handlers and logging in Python

后端 未结 2 1068
误落风尘
误落风尘 2020-12-30 09:08

Documentation for logging module says that

If you are implementing asynchronous signal handlers using the signal module, you may not be able to use lo

2条回答
  •  礼貌的吻别
    2020-12-30 09:32

    The GIL (Global Interpreter Lock) prevents any Python code from running at the same time, so technically the main thread can't process a signal while other threads are running. It may "appear" that way but there is one big mutex that only allows one python thread to run at a time.

    The best I can guess, the problem with signals and threading is that a signal is normally caused by an interrupt which can happen at anytime. So I would imagine Python stops what it's doing and calls the handler. At this point a lock may already have been acquired and so if logging tries to lock again, you get a deadlock. In some implementations this works OK because the mutex can be locked multiple times (re-entrant) but others there is only one lock.

    Hopefully someone else can back this up.

提交回复
热议问题