Python Multiprocessing For-Loop

Python Multiprocessing For Loop



Multiprocessing setanding dengan multithreading. Walau bagaimanapun, ia membezakan kerana kita hanya boleh melaksanakan satu utas pada satu-satu masa kerana GIL yang digunakan untuk threading. Pemprosesan berbilang ialah proses melaksanakan operasi secara berurutan merentas beberapa teras CPU. Benang tidak boleh dikendalikan secara selari. Walau bagaimanapun, pemprosesan berbilang membolehkan kami menetapkan proses dan menjalankannya serentak pada pelbagai teras CPU. Gelung, seperti gelung untuk, adalah salah satu bahasa skrip yang paling kerap digunakan. Ulangi kerja yang sama menggunakan pelbagai data sehingga kriteria, seperti bilangan lelaran yang telah ditetapkan, dicapai. Gelung menyelesaikan setiap lelaran satu demi satu.

Contoh 1:  Menggunakan For-Loop dalam Modul Pemprosesan Berbilang Python

Dalam contoh ini, kami menggunakan for-loop dan proses kelas modul pemproses berbilang Python. Kami mulakan dengan contoh yang sangat mudah supaya anda boleh memahami dengan cepat cara Python multiprocessing for-loop berfungsi. Menggunakan antara muka yang setanding dengan modul threading, multiprocessing mengemas penciptaan proses.







Dengan menggunakan sub-proses dan bukannya benang, pakej berbilang pemprosesan menyediakan kedua-dua konkurensi tempatan dan jauh, dengan itu mengelakkan Kunci Jurubahasa Global. Gunakan gelung untuk, yang boleh menjadi objek rentetan atau tuple, untuk terus melelang melalui urutan. Ini berprestasi kurang seperti kata kunci yang dilihat dalam bahasa pengaturcaraan lain dan lebih seperti kaedah lelaran yang terdapat dalam bahasa pengaturcaraan lain. Dengan memulakan pemproses berbilang baharu, anda boleh menjalankan gelung untuk yang melaksanakan prosedur secara serentak.



Mari mulakan dengan melaksanakan kod untuk pelaksanaan kod dengan menggunakan alat 'spyder'. Kami percaya bahawa 'spyder' juga adalah yang terbaik untuk menjalankan Python. Kami mengimport proses modul berbilang pemprosesan yang kod sedang berjalan. Multiprocessing dalam konsep Python yang diistilahkan sebagai 'kelas proses' mencipta proses Python baharu, memberikannya kaedah untuk melaksanakan kod, dan memberikan aplikasi induk cara untuk mengurus pelaksanaan. Kelas Proses mengandungi prosedur start() dan join(), yang kedua-duanya adalah penting.



Seterusnya, kami mentakrifkan fungsi yang ditentukan pengguna yang dipanggil 'func'. Oleh kerana ia adalah fungsi yang ditentukan pengguna, kami memberikannya nama pilihan kami. Di dalam badan fungsi ini, kami lulus pembolehubah 'subjek' sebagai hujah dan nilai 'matematik'. Seterusnya, kami memanggil fungsi 'print()', menghantar pernyataan 'Nama subjek biasa ialah' serta argumen 'subjek' yang mengandungi nilai. Kemudian, dalam langkah berikut, kami menggunakan 'if name== _main_', yang menghalang anda daripada menjalankan kod apabila fail diimport sebagai modul dan hanya membenarkan anda berbuat demikian apabila kandungan dilaksanakan sebagai skrip.





Bahagian syarat yang anda mulakan mungkin dianggap dalam kebanyakan keadaan sebagai lokasi untuk menyediakan kandungan yang hanya perlu dilaksanakan apabila fail anda dijalankan sebagai skrip. Kemudian, kami menggunakan subjek hujah dan menyimpan beberapa nilai di dalamnya iaitu 'sains', 'Bahasa Inggeris', dan 'komputer'. Proses tersebut kemudiannya diberi nama 'process1[]' dalam langkah berikut. Kemudian, kami menggunakan 'proses(target=func)' untuk memanggil fungsi dalam proses. Sasaran digunakan untuk memanggil fungsi, dan kami menyimpan proses ini dalam pembolehubah 'P'.

Seterusnya, kami menggunakan 'process1' untuk memanggil fungsi 'append()' yang menambahkan item ke penghujung senarai yang kami ada dalam fungsi 'func.' Oleh kerana proses itu disimpan dalam pembolehubah 'P', kami menghantar 'P' kepada fungsi ini sebagai hujahnya. Akhir sekali, kami menggunakan fungsi 'start()' dengan 'P' untuk memulakan proses. Selepas itu, kami menjalankan kaedah itu sekali lagi sambil membekalkan hujah 'subjek' dan menggunakan 'untuk' dalam subjek. Kemudian, menggunakan kaedah 'process1' dan 'add()' sekali lagi, kami memulakan proses tersebut. Proses kemudian berjalan dan output dikembalikan. Prosedur itu kemudiannya diberitahu untuk ditamatkan menggunakan teknik 'join()'. Proses yang tidak memanggil prosedur 'join()' tidak akan keluar. Satu perkara penting ialah parameter kata kunci 'args' mesti digunakan jika anda ingin memberikan sebarang hujah melalui proses tersebut.




Sekarang, anda boleh melihat dalam output bahawa pernyataan itu dipaparkan terlebih dahulu dengan menghantar nilai untuk subjek 'matematik' yang kami masukkan ke dalam fungsi 'func' kerana kami mula-mula memanggilnya menggunakan fungsi 'proses'. Kemudian, kami menggunakan perintah 'append()' untuk mempunyai nilai yang sudah ada dalam senarai yang ditambahkan pada penghujungnya. Kemudian, 'sains', 'komputer', dan 'Bahasa Inggeris' dibentangkan. Tetapi, seperti yang anda lihat, nilainya tidak berada dalam urutan yang betul. Ini kerana mereka berbuat demikian secepat prosedur selesai dan melaporkan mesej mereka.

Contoh 2: Penukaran Sequential For-Loop Kepada Multiprocessing Parallel For-Loop

Dalam contoh ini, tugas gelung berbilang pemprosesan dilaksanakan secara berurutan sebelum ditukar kepada tugasan untuk gelung selari. Anda boleh mengitar jujukan seperti koleksi atau rentetan mengikut tertib jujukan itu berlaku menggunakan gelung untuk.

Sekarang, mari kita mula melaksanakan kod tersebut. Pertama, kami mengimport 'tidur' daripada modul masa. Menggunakan prosedur 'sleep()' dalam modul masa, anda boleh menangguhkan pelaksanaan utas panggilan selama yang anda suka. Kemudian, kami menggunakan 'rawak' daripada modul rawak, mentakrifkan fungsi dengan nama 'func', dan lulus kata kunci 'argu'. Kemudian, kami mencipta nilai rawak menggunakan 'val' dan menetapkannya kepada 'rawak'. Kemudian, kami menyekat untuk tempoh sedikit menggunakan kaedah 'sleep()' dan lulus 'val' sebagai parameter. Kemudian, untuk menghantar mesej, kami menjalankan kaedah 'cetak()', menghantar perkataan 'sedia' dan kata kunci 'arg' sebagai parameternya, serta 'dicipta' dan lulus nilai menggunakan 'val'.

Akhir sekali, kami menggunakan 'flush' dan menetapkannya kepada 'True'. Pengguna boleh memutuskan sama ada untuk menimbal keluaran menggunakan pilihan flush dalam fungsi cetakan Python. Nilai lalai parameter ini False menunjukkan bahawa output tidak akan ditimbal. Output dipaparkan sebagai satu siri baris yang mengikuti satu sama lain jika anda menetapkannya kepada benar. Kemudian, kami menggunakan 'jika nama == utama' untuk menjamin titik kemasukan. Seterusnya, kami melaksanakan kerja secara berurutan. Di sini, kami menetapkan julat kepada '10' yang bermaksud bahawa gelung berakhir selepas 10 lelaran. Seterusnya, kami memanggil fungsi 'cetak ()', berikannya pernyataan input 'sedia', dan gunakan pilihan 'flush=True'.


Anda kini boleh melihat bahawa apabila kami melaksanakan kod, gelung menyebabkan fungsi berjalan '10' kali. Ia berulang sebanyak 10 kali, bermula pada indeks sifar dan berakhir pada indeks sembilan. Setiap mesej mengandungi nombor tugas yang merupakan nombor fungsi yang kami masukkan sebagai 'arg' dan nombor ciptaan.


Gelung berjujukan ini kini diubah menjadi gelung bagi selari berbilang pemprosesan. Kami menggunakan kod yang sama, tetapi kami akan pergi ke beberapa perpustakaan dan fungsi tambahan untuk multiprocessing. Oleh itu, kita mesti mengimport proses daripada multiprocessing, seperti yang telah kami jelaskan sebelum ini. Seterusnya, kami mencipta fungsi yang dipanggil 'func' dan lulus kata kunci 'arg' sebelum menggunakan 'val=random' untuk mendapatkan nombor rawak.

Kemudian, selepas menggunakan kaedah 'print()' untuk menunjukkan mesej dan memberikan parameter 'val' untuk menangguhkan sedikit tempoh, kami menggunakan fungsi 'if name= main' untuk menjamin titik masuk. Di mana, kami mencipta proses dan memanggil fungsi dalam proses menggunakan 'proses' dan lulus 'target=func'. Kemudian, kami lulus 'func', 'arg', lulus nilai 'm', dan melepasi julat '10' yang bermaksud bahawa gelung menamatkan fungsi selepas lelaran '10'. Kemudian, kami memulakan proses menggunakan kaedah 'mula ()' dengan 'proses'. Kemudian, kami memanggil kaedah 'join()' untuk menunggu pelaksanaan proses dan untuk menyelesaikan semua proses selepas itu.


Oleh itu, apabila kita melaksanakan kod, fungsi memanggil proses utama dan memulakan pelaksanaannya. Mereka selesai, bagaimanapun, sehingga semua tugas selesai. Kita dapat melihatnya kerana setiap tugas dijalankan serentak. Ia melaporkan mesejnya sebaik sahaja ia selesai. Ini bermakna walaupun mesej tidak teratur, gelung berakhir selepas semua lelaran '10' selesai.

Kesimpulan

Kami membincangkan Python multiprocessing for-gelung dalam artikel ini. Kami turut membentangkan dua ilustrasi. Ilustrasi pertama menunjukkan cara menggunakan gelung untuk dalam perpustakaan berbilang pemprosesan gelung Python. Dan ilustrasi kedua menunjukkan cara menukar gelung bagi berjujukan kepada gelung berbilang pemprosesan selari. Sebelum membina skrip untuk Python multiprocessing, kita mesti mengimport modul multiprocessing.