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 for
döngüsünün yürütme süresini karşılaştırın : [C] Python for
dö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_function
zamanı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 .threading
my_function()
Son olarak, my_function()
GIL'yi serbest bırakmazsa, multiprocessing
modül kullanılabilir .
Kaynaklar: Python, Eşzamanlı Yürütme ile ilgili dokümanlar ve paralel işlemede numpy / scipy girişini yapar .