Python:並行執行Cat 子程序
此腳本旨在執行多個cat | zgrep 在遠端伺服器上執行指令,並單獨伺服器捕獲它們的輸出以進行進一步處理。然而,目前的實作是按順序執行這些命令,這會影響效能。
為了解決這個問題,我們可以利用 Python 中並行性的力量。透過如下修改程式碼,我們可以並行執行子流程調用,同時仍保持單獨收集每個命令的輸出的能力:
<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>
此更新的程式碼利用子流程模組中的Process 類別來為每個命令建立子進程。然後它使用通訊方法來捕獲每個進程的輸出。透過提供一個空字串作為 stdin 參數的輸入,我們可以指定不應將任何輸入傳送到子進程。
此腳本也示範如何使用清單理解來建立進程清單和同時輸出的清單。與使用多處理或執行緒相比,這種方法提供了更簡單、更簡潔的實作。
此外,此腳本使用 close_fds 參數來確保子程序的檔案描述符在使用後關閉。這有助於防止子進程並行執行時潛在的資源洩漏或錯誤。
以上是如何執行多個`cat | zgrep` 指令與 Python 並行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!