Dua contoh hasil uji coba multiprocessing -- berikut adalah bukti konsep yang saya pelajari dari library multiprocessing
.
Contoh proses Pool dan mapping untuk mengkalikan angka dalam list
Proses menghitung dari 0 hingga 200.000.000 (200 juta) 3 kali berurutan tanpa parallel processing berfungsi sebagai patokan
Proses menghitung dari 0 hingga 200.000.000 (200 juta) 3 kali proses sekaligus dengan parallel processing sebagai bukti dari konsep
Salah satu cara untuk mengimplementasikan sistem parallelism adalah menggunakan module multiprocessing
. Modul multiprocessing
memungkinkan kita untuk membuat banyak proses, salah satunya adalah dengan interpreter itu sendiri. Python juga memiliki library built-in threading
, module multiprocessing
membuat proses baru, sedangkan threading
membuat threads baru. multiprocessing
adalah package yang mendukung proses menggunakan API yang mirip dengan modul threading
. multiprocessing
menawarkan remote dan local, yang secara efektif melebihi Global Interpreter Lock dengan menggunakan subproses daripada thread. Karena itu, modul multiprocessor
memungkinkan programmer untuk sepenuhnya memanfaatkan beberapa prosesor CPU pada perangkat tertentu. Modul multiproses juga memperkenalkan API yang tidak memiliki analog dalam modul threading
. Contoh utamanya adalah objek Pool
yang menawarkan cara mudah untuk paralel eksekusi function di beberapa nilai input, mendistribusikan data input di seluruh proses (data parallelism).
Salah satu contoh class dari multiprocessing
adalah Pool. Pool class dapat digunakan untuk melalukan eksekusi function secara paralel. Class multiprocessing.Pool()
memunculkan sekumpulan proses yang disebut workers dan dapat mengirimkan tugas menggunakan metode apply/apply_async
dan map/map_async
.
pool = multiprocessing_Pool()
pool = multiprocessing_Pool(processes=4) # menambahkan 4 worker
Contoh program
import multiprocessing # import multiprocessing library
def worker(num):
'''proses yang akan dibuat di Pool'''
return num*2 # mengkalikan angka dengan 2
if __name__ == '__main__': # insert proses di Windows -- tidak diperlukan di Linux
angka = [1,2,3,4,5,6,7,8,9] # list untuk reiterate dan mengkalikan dengan 2
p = multiprocessing.Pool(2) # membuat 2 prosesor pool
value = p.map(func=worker,iterable=angka) # mengirim angka ke pool proses
p.close() # mematikan pool proses
print(value) # print value baru
Output
[2, 4, 6, 8, 10, 12, 14, 16, 18]
Berikut beberapa manfaat dari multiprocessing:
- Penggunaan CPU lebih efektif disaat menjalankan program yang memerlukan CPU yang tinggi.
- Lebih banyak kontrol kepada child komponen daripada threads.
- Lebih mudah untuk diprogram.