我有以下Python代碼,我從標準輸入收集數據到列表中並在其上運行syntaxnet。數據是json對象的形式,我將從中提取文本字段並將其提供給syntaxnet。從stdin收集數據塊:Python
data = []
for line in sys.stdin:
data.append(line)
run_syntaxnet(data) ##This is a function##
我這樣做,因爲我不想Syntaxnet爲每單鳴叫運行,因爲它需要很長的時間,從而降低性能。
此外,當我在非常大的數據上運行此代碼時,我不想永遠收集它並耗盡內存。因此,我希望以塊的形式收集數據 - 可能每次都有10000條推文,並在其上運行Syntaxnet。有人可以幫助我如何做到這一點?
此外,我想了解什麼可以是最大長度的清單data
,以便我沒有用完內存。
編輯:
我使用的代碼:
data = []
for line in sys.stdin:
data.append(line)
if len(data) == 10000:
run_syntaxnet(data) ##This is a function##
data = []
它運行如果輸入的數據行數是10000多,我不知道該怎麼做完全正常與其餘的行。
例如,如果總行數爲12000,則會根據需要處理前10000行,但由於未滿足條件len(data) > 10000
,所以會停止接下來的2000行。
我想要做的事,如:
if len(data) > 10000 or 'EOF of input file is reached':
run_syntaxnet(data)
有人能告訴我如何檢查輸入文件的EOF?提前致謝!
PS:Python文件中的所有數據都來自Pig Streaming。另外,我不能真正計算輸入數據的行數,並將其作爲參數進行發送,因爲我擁有數百萬行,並且自行計數將永遠佔用。
看一看發電機 – iScrE4m