On Wed, 18 Dec 2013 00:19:23 +0100 Daniel Pocock <daniel at pocock.com.au> wrote: > > If a main thread does things like importing a module and obtaining a > reference to a Python method, can those things be used by other C++ > threads or do they have to repeat those lookups? The C++ threads must use the PyGILState API to initialize corresponding Python thread states, and to hold the GIL. However, you don't have to *repeat* the lookups - pointers valid in one thread are valid in other threads, as long as you own a strong reference to the PyObject (beware functions which return a borrowed reference). > Is there any logic that needs to be executed once only as each thread is > started? (the doc suggests just PyGILState_Ensure/PyGILState_Release > each time a thread accesses Python methods - is there anything else?) If you use the PyGILState API, there shouldn't be anything else. > (e.g. should users always > explicitly call PyEval_InitThreads() in their main thread or worker > threads or both?) You only need to call PyEval_InitThreads() once in the main Python thread. Regards Antoine.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4