Python Multiprocessing For-Loop

Python Multiprocessing For Loop



Multipemrosesan sebanding dengan multithreading. Namun, ini membedakan bahwa kami hanya dapat mengeksekusi satu utas pada satu waktu karena GIL yang digunakan untuk penguliran. Multipemrosesan adalah proses melakukan operasi secara berurutan di beberapa inti CPU. Thread tidak dapat dioperasikan secara paralel. Namun, multipemrosesan memungkinkan kami membuat proses dan menjalankannya secara bersamaan di berbagai inti CPU. Loop, seperti for-loop, adalah salah satu bahasa skrip yang paling sering digunakan. Ulangi pekerjaan yang sama menggunakan berbagai data hingga kriteria, seperti jumlah iterasi yang ditentukan sebelumnya, tercapai. Loop menyelesaikan setiap iterasi satu per satu.

Contoh 1:  Memanfaatkan For-Loop di Modul Multiprosesing Python

Dalam contoh ini, kami menggunakan for-loop dan proses kelas modul multiprosesing Python. Kita mulai dengan contoh yang sangat mudah sehingga Anda dapat dengan cepat memahami cara kerja for-loop multiprosesing Python. Menggunakan antarmuka yang sebanding dengan modul threading, multiprocessing mengemas pembuatan proses.







Dengan menggunakan sub-proses daripada utas, paket multiproses menyediakan konkurensi lokal dan jauh, sehingga menghindari Kunci Penerjemah Global. Gunakan for-loop, yang bisa berupa objek string atau tuple, untuk terus mengulang melalui urutan. Performanya kurang seperti kata kunci yang terlihat di bahasa pemrograman lain dan lebih seperti metode iterator yang ditemukan di bahasa pemrograman lain. Dengan memulai multiprosesing baru, Anda dapat menjalankan for-loop yang menjalankan prosedur secara bersamaan.



Mari kita mulai dengan mengimplementasikan kode untuk eksekusi kode dengan menggunakan alat 'spyder'. Kami percaya bahwa “spyder” juga yang terbaik untuk menjalankan Python. Kami mengimpor proses modul multiprosesing yang menjalankan kode. Multiprocessing dalam konsep Python disebut 'kelas proses' menciptakan proses Python baru, memberikannya metode untuk mengeksekusi kode, dan memberikan aplikasi induk cara untuk mengelola eksekusi. Kelas Process berisi prosedur start() dan join(), keduanya sangat penting.



Selanjutnya, kami mendefinisikan fungsi yang ditentukan pengguna yang disebut 'func'. Karena ini adalah fungsi yang ditentukan pengguna, kami memberinya nama pilihan kami. Di dalam tubuh fungsi ini, kami meneruskan variabel 'subjek' sebagai argumen dan nilai 'matematika'. Selanjutnya, kita memanggil fungsi “print()”, meneruskan pernyataan “Nama subjek umum adalah” serta argumen “subjek” yang berisi nilai. Kemudian, pada langkah berikutnya, kami menggunakan “if name== _main_,” yang mencegah Anda menjalankan kode saat file diimpor sebagai modul dan hanya mengizinkan Anda melakukannya saat konten dijalankan sebagai skrip.





Bagian kondisi yang Anda mulai mungkin dianggap dalam sebagian besar keadaan sebagai lokasi untuk menyediakan konten yang seharusnya hanya dijalankan saat file Anda dijalankan sebagai skrip. Kemudian, kami menggunakan subjek argumen dan menyimpan beberapa nilai di dalamnya yaitu 'sains', 'Bahasa Inggris', dan 'komputer'. Proses tersebut kemudian diberi nama “process1[]” pada langkah berikutnya. Kemudian, kami menggunakan 'proses (target = func)' untuk memanggil fungsi dalam proses. Target digunakan untuk memanggil fungsi, dan kami menyimpan proses ini dalam variabel 'P'.

Selanjutnya, kami menggunakan 'process1' untuk memanggil fungsi 'append()' yang menambahkan item ke akhir daftar yang kami miliki di fungsi 'func.' Karena proses disimpan dalam variabel 'P', kami meneruskan 'P' ke fungsi ini sebagai argumennya. Terakhir, kami menggunakan fungsi “start()” dengan “P” untuk memulai proses. Setelah itu, kami menjalankan metode lagi sambil memberikan argumen 'subjek' dan menggunakan 'untuk' di subjek. Kemudian, dengan menggunakan metode “process1” dan “add()” sekali lagi, kita memulai prosesnya. Proses kemudian berjalan dan output dikembalikan. Prosedur kemudian disuruh untuk mengakhiri menggunakan teknik “join()”. Proses yang tidak memanggil prosedur “join()” tidak akan keluar. Satu poin penting adalah bahwa parameter kata kunci “args” harus digunakan jika Anda ingin memberikan argumen apa pun melalui proses tersebut.




Sekarang, Anda dapat melihat di output bahwa pernyataan tersebut ditampilkan terlebih dahulu dengan meneruskan nilai untuk subjek 'matematika' yang kami berikan ke fungsi 'func' karena kami memanggilnya terlebih dahulu menggunakan fungsi 'proses'. Kemudian, kami menggunakan perintah 'append()' untuk memiliki nilai yang sudah ada di daftar yang ditambahkan di bagian akhir. Kemudian, 'sains', 'komputer', dan 'Bahasa Inggris' disajikan. Tapi, seperti yang Anda lihat, nilainya tidak berada dalam urutan yang benar. Ini karena mereka melakukannya segera setelah prosedur selesai dan melaporkan pesan mereka.

Contoh 2: Konversi Sequential For-Loop Menjadi Multiprocessing Parallel For-Loop

Dalam contoh ini, tugas multiprocessing loop dijalankan secara berurutan sebelum diubah menjadi tugas for-loop paralel. Anda dapat menggilir urutan seperti kumpulan atau string dalam urutan kemunculannya menggunakan for-loop.

Sekarang, mari kita mulai menerapkan kodenya. Pertama, kami mengimpor 'tidur' dari modul waktu. Dengan menggunakan prosedur “sleep()” dalam modul waktu, Anda dapat menangguhkan eksekusi thread pemanggil selama yang Anda suka. Kemudian, kami menggunakan 'acak' dari modul acak, menentukan fungsi dengan nama 'func', dan meneruskan kata kunci 'argu'. Kemudian, kami membuat nilai acak menggunakan 'val' dan menyetelnya ke 'acak'. Kemudian, kami memblokir sebentar menggunakan metode 'sleep()' dan meneruskan 'val' sebagai parameter. Kemudian, untuk mengirim pesan, kami menjalankan metode 'print ()', meneruskan kata 'siap' dan kata kunci 'arg' sebagai parameternya, serta 'dibuat' dan meneruskan nilainya menggunakan 'val'.

Terakhir, kami menggunakan 'flush' dan menyetelnya ke 'True'. Pengguna dapat memutuskan apakah akan menyangga keluaran atau tidak menggunakan opsi siram dalam fungsi cetak Python. Nilai default False dari parameter ini menunjukkan bahwa output tidak akan di-buffer. Output ditampilkan sebagai rangkaian garis yang mengikuti satu sama lain jika Anda menyetelnya ke true. Kemudian, kami menggunakan “if name== main” untuk mengamankan titik masuk. Selanjutnya, kami menjalankan pekerjaan secara berurutan. Di sini, kami mengatur rentang ke '10' yang berarti bahwa loop berakhir setelah 10 iterasi. Selanjutnya, kita memanggil fungsi 'print()', meneruskannya ke pernyataan input 'ready', dan menggunakan opsi 'flush=True'.


Anda sekarang dapat melihat bahwa ketika kita mengeksekusi kode, loop menyebabkan fungsi berjalan “10” kali. Ini berulang hingga 10 kali, mulai dari indeks nol dan berakhir pada indeks sembilan. Setiap pesan berisi nomor tugas yang merupakan nomor fungsi yang kami berikan sebagai 'arg' dan nomor pembuatan.


Loop sekuensial ini sekarang diubah menjadi loop-for paralel multiprosesing. Kami menggunakan kode yang sama, tetapi kami akan menggunakan beberapa pustaka tambahan dan fungsi untuk multiprosesing. Oleh karena itu, kita harus mengimpor proses dari multiprocessing, seperti yang telah kami jelaskan sebelumnya. Selanjutnya, kami membuat fungsi yang disebut 'func' dan meneruskan kata kunci 'arg' sebelum menggunakan 'val=random' untuk mendapatkan nomor acak.

Kemudian, setelah menjalankan metode 'print()' untuk menampilkan pesan dan memberikan parameter 'val' untuk menunda sedikit waktu, kami menggunakan fungsi 'if name= main' untuk mengamankan titik masuk. Kemudian, kami membuat proses dan memanggil fungsi dalam proses menggunakan 'proses' dan meneruskan 'target = func'. Kemudian, kami meneruskan 'func', 'arg', meneruskan nilai 'm', dan meneruskan rentang '10' yang berarti bahwa perulangan menghentikan fungsi setelah iterasi '10'. Kemudian, kita memulai proses menggunakan metode “start()” dengan “proses”. Kemudian, kami memanggil metode 'bergabung ()' untuk menunggu eksekusi proses dan menyelesaikan semua proses setelahnya.


Oleh karena itu, saat kami mengeksekusi kode, fungsi memanggil proses utama dan memulai eksekusinya. Namun, mereka selesai sampai semua tugas selesai. Hal ini dapat kita lihat karena setiap tugas dilakukan secara bersamaan. Itu melaporkan pesannya segera setelah selesai. Ini berarti bahwa meskipun pesan rusak, loop berakhir setelah semua iterasi '10' selesai.

Kesimpulan

Kami membahas for-loop multiprosesing Python dalam artikel ini. Kami juga menyajikan dua ilustrasi. Ilustrasi pertama menunjukkan cara menggunakan for-loop di library loop multiprocessing Python. Dan ilustrasi kedua menunjukkan cara mengubah for-loop berurutan menjadi for-loop multiprosesing paralel. Sebelum membuat skrip untuk multiprosesor Python, kita harus mengimpor modul multiprosesor.