Python: Melaksanakan Subproses Kucing Secara Selari
Skrip ini bertujuan untuk menjalankan berbilang kucing | perintah zgrep pada pelayan jauh, dan tangkap outputnya secara individu untuk pemprosesan selanjutnya. Walau bagaimanapun, pelaksanaan semasa melaksanakan perintah ini secara berurutan, yang menghalang prestasi.
Untuk menangani isu ini, kami boleh memanfaatkan kuasa selari dalam Python. Dengan mengubah suai kod seperti berikut, kami boleh melaksanakan panggilan subproses secara selari sambil masih mengekalkan keupayaan untuk mengumpul output bagi setiap arahan secara individu:
<code class="python">import asyncio import sys from subprocess import Popen, PIPE, STDOUT # Run commands in parallel processes = [Popen('ssh remote_host cat files_to_process | zgrep --mmap "regex"', shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) for _ in range(5)] # Collect outputs in parallel def get_lines(process): return process.communicate()[0].splitlines() outputs = [get_lines(process) for process in processes]</code>
Kod yang dikemas kini ini menggunakan kelas Proses daripada modul subproses kepada buat subproses untuk setiap arahan. Ia kemudiannya menggunakan kaedah komunikasi untuk menangkap output daripada setiap proses. Dengan menyediakan rentetan kosong sebagai input kepada parameter stdin, kami boleh menentukan bahawa tiada input harus dihantar ke subproses.
Skrip juga menunjukkan cara menggunakan pemahaman senarai untuk mencipta senarai proses dan senarai keluaran secara serentak. Pendekatan ini menawarkan pelaksanaan yang lebih mudah dan ringkas berbanding dengan menggunakan berbilang pemprosesan atau penjalinan.
Selain itu, skrip menggunakan parameter close_fds untuk memastikan deskriptor fail untuk proses anak ditutup selepas ia digunakan. Ini membantu mengelakkan potensi kebocoran sumber atau ralat apabila subproses dilaksanakan secara selari.
Atas ialah kandungan terperinci Cara Melaksanakan Berbilang `kucing | zgrep` Perintah selari dengan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!