我是python的新手,所以这可能是一个简单的问题,但我有一个kafka消费者,我从中读取消息。每次收到新消息时,它都会将之前的消息重写为order.json文件,但是我想要添加它。另外,我想确保消息不会以每1秒钟的速度读取,并且可能会暂停某些操作。任何有关如何做到这一点的提示将非常感激。这是我目前的代码
for message in consumer:
with open('order.json', 'w') as file:
file.write(message.value.decode('UTF-8'))
答案 0 :(得分: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'))
答案 1 :(得分: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。
答案 2 :(得分:0)
以append
模式打开文件' w'
(写入模式)每次文件都会截断文件
for message in consumer:
with open('order.json', 'a') as file:
file.write(message.value.decode('UTF-8'))