Multithreading in eigener C-Bibliothek

19/08/2010 - 11:18 von Ole Streicher | Report spam
Hallo,

ich habe eine eigene C-Bibliothek (mit der Standard-C-API angebunden),
die einige sehr langwierige Berechnungen ausführt. Etwa sowas:

int my_long_running_function(int);

static PyObject *
my_long_runnning_exec(CPL_recipe *self, PyObject *args) {
int c_arg;
if (!PyArg_ParseTuple(args, "i", &c_arg))
return NULL;
// 1
int c_res = my_long_running_function(c_arg);
// 2
return Py_BuildValue("i", c_res);
}

Nun dauert die aufgerufene Funktion sehr lange und soll mehrfach
parallel aufgerufen werden. Wenn ich sie nun einfach in eine
"threading.Thread"-Ableitung packe, dann ist trotzdem immer nur einer
aktiv -- was vermutlich am GIL liegt.

Irgendwie müsste ich doch sagen können, dass zwischen "// 1" und "// 2"
nicht auf Python-Objekte zugegriffen wird und ich darum das GIL nicht
mehr benötige. Aber wie mache ich das? Oder bin ich da komplett auf dem
Holzweg?

Viele Grüße

Ole
 

Lesen sie die antworten

#1 Christopher Arndt
19/08/2010 - 13:32 | Warnen spam
Ole Streicher schrieb:
Irgendwie müsste ich doch sagen können, dass zwischen "// 1" und "// 2"
nicht auf Python-Objekte zugegriffen wird und ich darum das GIL nicht
mehr benötige. Aber wie mache ich das?



http://docs.python.org/c-api/init.h...reter-lock

Hdh, Chris

Ähnliche fragen