2016-08-21 89 views
0

我是新的python,所以這可能是一個簡單的問題,但我有一個卡夫卡消費者,我從中讀取消息。每次有新消息進入時,它都會將之前的消息重寫到order.json文件中,但是我想將其附加到它上面。此外,我想確保消息不會以每秒1秒的速度讀取,而且可能會出現某種暫停。任何提示如何做到這一點將不勝感激。這裏是我當前的代碼如何追加到一個文件從流而不是覆蓋在Python

for message in consumer: 
    with open('order.json', 'w') as file: 
      file.write(message.value.decode('UTF-8')) 
+0

是什麼*我想,以確保信息不會得到比每1沒有更快的讀取時間第二。*是什麼意思?從哪裏讀取? –

回答

0

公開賽在append模式爲「w'(寫模式)的文件截斷文件中的每個存在

for message in consumer: 
    with open('order.json', 'a') as file: 
     file.write(message.value.decode('UTF-8')) 
0

外循環打開:

with open('order.json', 'w') as file: 
    for message in consumer:   
      file.write(message.value.decode('UTF-8')) 

或者打開之外,它a如果你將要追加每次運行:

with open('order.json', 'a') as file: 
    for message in consumer:   
      file.write(message.value.decode('UTF-8')) 
0

你想在append mode中打開您的文件。此外,您可能不希望打開每封郵件的文件,因爲它可以是一個昂貴的操作(例如,您將需要在每次關閉文件時更改文件的元數據像修改時間):

# open file in append mode, once 
with open('order.json', 'a') as file: 
    for message in consumer: 
     file.write(message.value.decode('UTF-8')) 

至於速率限制,你可以用一些簡單的開始,如下所示:

import time 

def ratelimit(it, sleep=1.0): 
    for v in it: 
     yield v 
     time.sleep(sleep) 

if __name__ == '__main__': 
    for i in ratelimit(range(10)): 
     print(i) 

這將確保,有至少從一個迭代連續值之間一秒的延遲。這是一個asciicast顯示限速器的行動。

相關問題