2016-12-05 59 views
0

everyone! 我有一個python腳本,它處理來自COM端口的輸入。如何在python + linux中監聽port parallel

import sys 
for string in sys.stdin: 
    some_calculation(string) 

它運行是這樣的:

cat -v /dev/pts/2 | python3 'process.py' 

我想通過使用GNU並行使其平行,例如。 我的方式是這樣的:A |並行B

cat -v /dev/pts/2 | parallel --pipe --recstart '>' python3 process.py 

但它不工作。

任何想法? 非常感謝。 更新: 我找到了一些解決方案:

cat /dev/pts/2 | parallel -j2 "echo {} | python3 process.py" 

另一條由Inian:

cat -v /dev/pts/2 | parallel --recstart '>' --pipe python3 process.py 

回答

0

您可以調用GNU parallel--pipe選項如下: -

--pipe 
     Spread input to jobs on stdin (standard input). Read a block 
     of data from stdin (standard input) and give one block of data 
     as input to one job. 

使用restart國旗前--pipe

cat -v /dev/pts/2 | parallel --recstart '>' --pipe python3 process.py 

有關更多信息GNU parallel

+0

它的工作原理!但有些錯誤: parallel:警告:一個完整​​的記錄在一個塊中不匹配。增加至 - 塊大小1363150. - 塊大小1772096 ... - 塊大小14455562 這是什麼? 謝謝。 – user7198142

+0

@ user7198142:您必須在命令中明確設置'--blocksize'。拋出該警告是因爲它不知道給定並行實例要讀取多少個塊。通常,如果將'--blocksize'設置爲最大記錄大小的至少2倍,則永遠不會看到警告。默認的塊大小是1MB – Inian

+0

謝謝,我會檢查它的答案! 我有最後一個問題,請問:如果我想盡快處理數據,我應該設置什麼(其他somrthing的塊大小),並且輸出只是180字節的行?數據不斷提供。 – user7198142