diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/pychrysalide/core/queue.c | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/plugins/pychrysalide/core/queue.c b/plugins/pychrysalide/core/queue.c index 5a0f524..d0fbed8 100644 --- a/plugins/pychrysalide/core/queue.c +++ b/plugins/pychrysalide/core/queue.c @@ -36,6 +36,12 @@ +/* Constitue un nouveau groupe de travail global. */ +static PyObject *py_queue_setup_global_work_group(PyObject *, PyObject *); + +/* Constitue un nouveau petit groupe de travail global. */ +static PyObject *py_queue_setup_tiny_global_work_group(PyObject *, PyObject *); + /* Attend que toutes les tâches de tout groupe soient traitées. */ static PyObject *py_queue_wait_for_all_global_works(PyObject *, PyObject *); @@ -46,6 +52,114 @@ static PyObject *py_queue_wait_for_all_global_works(PyObject *, PyObject *); * Paramètres : self = objet Python concerné par l'appel. * * args = non utilisé ici. * * * +* Description : Constitue un nouveau groupe de travail global. * +* * +* Retour : Nouvel identifiant unique d'un nouveau groupe de travail. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_queue_setup_global_work_group(PyObject *self, PyObject *args) +{ + PyObject *result; /* Valeur à retourner */ + PyThreadState *_save; /* Sauvegarde de contexte */ + wgroup_id_t wid; /* Identifiant de groupe */ + +#define QUEUE_SETUP_GLOBAL_WORK_GROUP_METHOD PYTHON_METHOD_DEF \ +( \ + setup_global_work_group, "", \ + METH_NOARGS, py_queue, \ + "Create a new work group for parallel processed jobs.\n" \ + "\n" \ + "The quantity of threads allocated for processing future" \ + " data depends of available CPU cores.\n" \ + "\n" \ + "The returned value is an integer value referring to the" \ + " unique identifier of a work group." \ +) + + Py_UNBLOCK_THREADS; + + wid = setup_global_work_group(); + + result = PyLong_FromUnsignedLongLong(wid); + + Py_BLOCK_THREADS; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : self = objet Python concerné par l'appel. * +* args = paramètre à récupérer pour le traitement. * +* * +* Description : Constitue un nouveau petit groupe de travail global. * +* * +* Retour : Nouvel identifiant unique d'un nouveau groupe de travail. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_queue_setup_tiny_global_work_group(PyObject *self, PyObject *args) +{ + PyObject *result; /* Valeur à retourner */ + unsigned int count; /* Nombre de thread parallèle */ + PyThreadState *_save; /* Sauvegarde de contexte */ + + int ret; /* Bilan de lecture des args. */ + wgroup_id_t wid; /* Identifiant de groupe */ + +#define QUEUE_SETUP_TINY_GLOBAL_WORK_GROUP_METHOD PYTHON_METHOD_DEF \ +( \ + setup_tiny_global_work_group, "/, count = 1", \ + METH_VARARGS, py_queue, \ + "Create a new tiny work group for parallel processed jobs.\n" \ + "\n" \ + "The *count* argument defines the quantity of threads allocated"\ + " for processing future data.\n" \ + "\n" \ + "The returned value is an integer value referring to the" \ + " unique identifier of a work group." \ +) + + result = NULL; + + count = 1; + + Py_UNBLOCK_THREADS; + + ret = PyArg_ParseTuple(args, "|I", &count); + if (!ret) goto exit; + + if (count < 1) + { + PyErr_SetString(PyExc_ValueError, "the provided quantity has to be strictly positive"); + goto exit; + } + + wid = setup_tiny_global_work_group(count); + + result = PyLong_FromUnsignedLongLong(wid); + + exit: + + Py_BLOCK_THREADS; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : self = objet Python concerné par l'appel. * +* args = non utilisé ici. * +* * * Description : Attend que toutes les tâches de tout groupe soient traitées. * * * * Retour : None. * @@ -94,6 +208,8 @@ bool populate_core_module_with_queue(void) PyObject *module; /* Module à recompléter */ static PyMethodDef py_queue_methods[] = { + QUEUE_SETUP_GLOBAL_WORK_GROUP_METHOD, + QUEUE_SETUP_TINY_GLOBAL_WORK_GROUP_METHOD, QUEUE_WAIT_FOR_ALL_GLOBAL_WORKS_METHOD, { NULL } }; |