2015-11-03 349 views
0

要求 - 我想執行使用管道使用LS,grep的一個命令,頭部等(|)。我正在尋找一些模式,並提取一些信息,這是我的http服務器支持的查詢的一部分。異步執行

最終的輸出不應該太大,所以假設stdout應該很好用(我在某處讀了關於死鎖問題) 目前,我使用subprocess模塊​​中的popen,但是我對此有疑問。

  • 可以同時發起多少次popen調用。
  • 立即出現在標準輸出中嗎? (現在它看起來的情況,但如何保證它,如果命令需要很長時間)
  • 如何確保一切異步 - 保持接近單線程模式?

我是新來的Python和視頻鏈接/文章也表示讚賞。除popen以外的其他任何方式都很好。

+1

這有點反模式。如果你只是想運行一個樁線,爲什麼不使用shell腳本?爲什麼你甚至需要Python?你究竟想要完成什麼? –

+0

同時進行「popen調用」的數量將取決於操作系統限制和硬件資源。 – dsh

+0

@RolandSmith它是http服務器查詢處理的一部分。我張貼的問題的原因 – singhsumit

回答

1

您可以使用os.listdiros.walk代替ls,而re模塊代替grep

總結了一切的功能,並使用如來自multiprocessing.Pool對象的map方法可以並行運行其中的幾個。這是一個非常好的模式。

在Python3,你也可以用類似的方式使用來自concurrent.futuresExecutors

+0

可以使用IOloop並避免執行者? – singhsumit

+0

你的意思是來自Tornado?我想是的,如果你直接使用「Popen」對象。 –

+0

是使用龍捲風的m。我的意思是在ioLoop而不是執行器(s)上進行計劃回調。將會很有效率嗎?我無法得到Popen相關點.. – singhsumit