Sebelum mencari alat "kotak hitam", yang dapat digunakan untuk menjalankan fungsi python paralel "generik", saya akan menyarankan untuk menganalisis bagaimana my_function()dapat diparalelkan dengan tangan.
Pertama, bandingkan waktu eksekusi my_function(v)untuk foroverhead python loop: [C] Python forloop sangat lambat, sehingga waktu yang dihabiskan my_function()bisa diabaikan.
>>> 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
Pemeriksaan kedua jika ada implementasi vektor sederhana my_function(v)yang tidak memerlukan loop:F[:] = my_vector_function(X)
(Dua poin pertama ini cukup sepele, maafkan saya jika saya menyebutkannya di sini hanya untuk kelengkapan.)
Ketiga dan yang paling poin penting, setidaknya untuk implementasi CPython, adalah untuk memeriksa apakah my_functionmenghabiskan sebagian besar itu waktu di dalam atau di luar yang juru kunci global yang , atau GIL . Jika waktu dihabiskan di luar GIL, maka threadingmodul perpustakaan standar harus digunakan. ( Ini contohnya). BTW, orang bisa menganggap menulis my_function()sebagai ekstensi C hanya untuk melepaskan GIL.
Akhirnya, jika my_function()tidak merilis GIL, seseorang dapat menggunakan multiprocessingmodul .
Referensi: Python docs tentang Eksekusi Bersamaan , dan intro numpy / scipy pada pemrosesan paralel .