
Mark Hammond wrote:
It can be done, yes. I am not looking for a change in semantics, just a simple way to do it (and maybe even a fast way to do it, but that is secondary). If such a way already exists, please enlighten us. If not, but it is sufficiently simple to describe, then please describe it. Otherwise, I do not understand your point.
There is a very simple strategy to support multiple threads in an extension module. 1. In all callbacks, create a thread state and acquire the current thread (this requires a singleton interpreter state). 2. In all API calls that may invoke callbacks, use Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS around the API call. If this strategy is followed, every code always has all Python resources, and no deadlocks result. Regards, Martin