Python extension module with callbacks into Python

Barry Scott barry at barrys-emacs.org
Wed Oct 28 11:05:02 EDT 2020



> On 28 Oct 2020, at 13:25, Paul Grinberg <gri6507 at gmail.com> wrote:
> 
>>> I am running into unpredictable behavior with my Python extension module that wraps around a C++ library that starts a new pthread and, after doing some work, generates callbacks back into the caller. I've greatly simplified this to a simplistic example which still demonstrates this problem. The following will sometimes generate a Fatal Python error: PyEval_SaveThread: NULL tstate, usually rather quickly. Sometimes it SIGSEGV on tupledealoc. Occasionally this deadlocks. I am at a loss why. Does anyone have any ideas?
> 
>> You did not say what OS and python version you are working with. 
> 
> I apologize. I am running this on Ubuntu 18.04 under Python 3.6 (default for this Ubuntu's Bionic release) fully updated to the latest provided by Ubuntu's standard repos, which is 3.6.9-1~18.04ubuntu1.3. After posting this question here I continued investigating this problem and found that when I repeat the same test under Python 3.7.3 or 3.8.5 (installed via PyEnv), there are no issues. Then, I went back to the most recent 3.6 release which is 3.6.12 (also installed via PyEnv) and again saw the issue. This seems to suggest that the problem is in 3.6.x Python.  
> 
>> Why do you need to call PyEval_ThreadsInitialized()? its deprecated. 
>> 
>> PyInitialize sets up threads unconditionally since 3.7. 
> 
> I did not realize that PyEval_ThreadsInitialized() is deprecated. However, I was also running under 3.6. I will move away from that once I move to a newer version of Python

Try calling PyEval_InitThreads() to force the python threading to be all setup.

Barry

> 
> -- 
> https://mail.python.org/mailman/listinfo/python-list
> 



More information about the Python-list mailing list