[Python-ideas] {Python-ideas] C-API exposure
geremy condra
debatem1 at gmail.com
Tue Mar 29 22:53:44 CEST 2011
On Tue, Mar 29, 2011 at 12:32 PM, Sturla Molden <sturla at molden.no> wrote:
> Den 29.03.2011 21:15, skrev Eric Snow:
>>
>> Well people already do this using ctypes...
>>
> Haven't used them myself yet. So you can use them to expose all of the
> C-API? Cool!
>
>
> Yes, ctypes.pythonapi exposes the Python C API to Python.
>
> You can use it for evil code like this hack to prevent thread switch
> (doesn't work with Python 3, as the implementation has changed). Just make
> sure you don't call extension code that releases the GIL, or all bets are
> off ;-)
>
> Sturla
>
>
>
> from contextlib import contextmanager
> import ctypes
> _Py_Ticker = ctypes.c_int.in_dll(ctypes.pythonapi,"_Py_Ticker")
>
> @contextmanager
> def atomic():
> tmp = _Py_Ticker.value
> _Py_Ticker.value = 0x7fffffff
> yield
> _Py_Ticker.value = tmp - 1
>
> Now we can do
>
> with atomic():
> # whatever
> pass
Huh. That's terrifying. Thanks for the example.
Geremy Condra
More information about the Python-ideas
mailing list