Zgodnie z this discussion, PyMem_Malloc()
wymaga GIL; jednak, jeśli funkcja jest niczym więcej niż alisem dla malloc()
, kogo to obchodzi?Dlaczego potrzebuję gil dla PyMem_Malloc()?
5
A
Odpowiedz
3
Ponieważ czasami jest to coś więcej niż zwykły alias dla malloc()
. Czasami jest to alias dla _PyMem_DebugMalloc()
i istnieje globalna rachunkowość, która pozwala śledzić unikalne obiekty pamięci. Nie ma sensu wypuszczać GIL'a tylko dla połączenia PyMem_Malloc()
, więc prawdopodobnie robisz coś bardziej skomplikowanego w C. Jeśli tak jest, możesz po prostu zadzwonić pod numer malloc()
i nie dostać żadnej z rzeczy do debugowania.
Od wersji 3.4 Pythona jest również 'PyMem_RawMalloc()', który nie wymaga trzymania GIL (patrz [PEP 445] (https://www.python.org/dev/peps/pep-0445/)). – Kai