Перш ніж шукати інструмент "чорний ящик", який можна використовувати для паралельного виконання "загальних" функцій пітона, я б запропонував проаналізувати, як my_function()можна паралелізувати вручну.
По-перше, порівняйте час виконання з накладними петлями my_function(v)python for: [C] forПетлі Python досить повільні, тому час, витрачений на них, my_function()може бути незначним.
>>> timeit.timeit('pass', number=1000000)
0.01692986488342285
>>> timeit.timeit('for i in range(10): pass', number=1000000)
0.47521495819091797
>>> timeit.timeit('for i in xrange(10): pass', number=1000000)
0.42337894439697266
По-друге, перевірте, чи існує проста проста векторна реалізація my_function(v), яка не вимагає циклів:F[:] = my_vector_function(X)
(Ці два перші пункти досить тривіальні, вибачте, якщо я згадав їх тут лише для повноти.)
В- третіх , і найголовніше, по крайней мере , для реалізації CPython, щоб перевірити , є чи my_functionпроводить більшу частину часу , це всередині або зовні від глобальної блокування інтерпретатора або GIL . Якщо час проводиться поза GIL, слід використовувати threadingстандартний модуль бібліотеки . ( Ось приклад). До речі, можна було б написати my_function()як розширення C, щоб випустити GIL.
Нарешті, якщо my_function()GIL не випускає, можна використовувати multiprocessingмодуль .
Посилання: Документи Python про паралельне виконання та введення numpy / scipy при паралельній обробці .