import unittest
-from itertools import batched, chain, combinations_with_replacement, cycle, permutations
+from itertools import accumulate, batched, chain, combinations_with_replacement, cycle, permutations
from test.support import threading_helper
class ItertoolsThreading(unittest.TestCase):
+ @threading_helper.reap_threads
+ def test_accumulate(self):
+ number_of_iterations = 10
+ for _ in range(number_of_iterations):
+ it = accumulate(tuple(range(40)))
+ threading_helper.run_concurrently(work_iterator, nthreads=10, args=[it])
+
@threading_helper.reap_threads
def test_batched(self):
number_of_iterations = 10
}
static PyObject *
-accumulate_next(PyObject *op)
+accumulate_next_lock_held(PyObject *op)
{
accumulateobject *lz = accumulateobject_CAST(op);
PyObject *val, *newtotal;
return newtotal;
}
+static PyObject *
+accumulate_next(PyObject *op)
+{
+ PyObject *result;
+ Py_BEGIN_CRITICAL_SECTION(op);
+ result = accumulate_next_lock_held(op);
+ Py_END_CRITICAL_SECTION()
+ return result;
+}
+
static PyType_Slot accumulate_slots[] = {
{Py_tp_dealloc, accumulate_dealloc},
{Py_tp_getattro, PyObject_GenericGetAttr},