首頁 > 後端開發 > Python教學 > 如何執行多個`cat | zgrep` 指令與 Python 並行?

如何執行多個`cat | zgrep` 指令與 Python 並行?

DDD
發布: 2024-10-29 13:47:02
原創
433 人瀏覽過

 How to Execute Multiple `cat | zgrep` Commands in Parallel with Python?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板