summaryrefslogtreecommitdiff
path: root/plugins/pychrysalide/core
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2020-12-20 22:20:22 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2020-12-20 22:20:22 (GMT)
commitc388ad8910dbb1a3c478176d8b1ab3142fdbd9d5 (patch)
tree8d998e94a4056cff68978181b19816f604e20b29 /plugins/pychrysalide/core
parentd9226fdf0cbaf8aa302bdb44b069173014a85264 (diff)
Completed the Python API for work groups.
Diffstat (limited to 'plugins/pychrysalide/core')
-rw-r--r--plugins/pychrysalide/core/queue.c116
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 }
};