Paralel "jenerik" python fonksiyonlarında çalıştırılabilecek bir "kara kutu" aracı aramadan my_function()önce, elle nasıl paralelleştirilebileceğini analiz etmeyi öneririm .
İlk olarak, my_function(v)baştaki python fordöngüsünün yürütme süresini karşılaştırın : [C] Python fordöngüleri oldukça yavaştır, bu nedenle harcanan zaman my_function()ihmal edilebilir.
>>> 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
İkincisi, basit bir vektör uygulamasının olup my_function(v)olmadığını, döngü gerektirmediğini kontrol edin :F[:] = my_vector_function(X)
(Bu iki ilk nokta oldukça önemsizdir, burada tamlıktan bahsettiysem beni affet.)
Üçüncü ve en önemli nokta, en azından CPython uygulamaları için, my_functionzamanının çoğunu küresel tercüman kilidinin içinde mi yoksa GIL dışında mı geçirdiğini kontrol etmektir . GIL dışında zaman harcanırsa, standart kütüphane modülü kullanılmalıdır. ( İşte bir örnek). BTW, biri yalnızca GIL'yi serbest bırakmak için bir C uzantısı olarak yazmayı düşünebilirdi .threadingmy_function()
Son olarak, my_function()GIL'yi serbest bırakmazsa, multiprocessingmodül kullanılabilir .
Kaynaklar: Python, Eşzamanlı Yürütme ile ilgili dokümanlar ve paralel işlemede numpy / scipy girişini yapar .