如何通过函数循环到python中的方法调用
问题描述:
我想做一个简单的函数python kafka,并且我在将一个字符串循环传递给producer.send_messages方法时遇到了麻烦。如何通过函数循环到python中的方法调用
from kafka import SimpleProducer, KafkaClient
import random
import os
kafka = KafkaClient('localhost:9092')
producer = SimpleProducer(kafka)
x = 0
while x!=1:
#producer.send_messages(b'test1',b'str(i)') #the program will run with this type of input
a=random.random()
message_method= "b"+"'"+topic+"'"+","+"b"+"'"+str(a)+"'"
producer.send_messages(message_method)
我将结束与此错误,
File "<stdin>", line 4, in <module>
File "/usr/lib/python2.7/site-packages/kafka/producer/simple.py", line 52, in send_messages
partition = self._next_partition(topic)
File "/usr/lib/python2.7/site-packages/kafka/producer/simple.py", line 36, in _next_partition
self.client.load_metadata_for_topics(topic)
File "/usr/lib/python2.7/site-packages/kafka/client.py", line 378, in load_metadata_for_topics
kafka.common.check_error(topic_metadata)
File "/usr/lib/python2.7/site-packages/kafka/common.py", line 233, in check_error
raise error_class(response)
kafka.common.UnknownError: TopicMetadata(topic="b'test1',b'0.595202345912'", error=17, partitions=[])
我明白任何意见,使之成为一个更加动态的方式(不需要硬编码b'messages' ...等),以该也把信息放入卡夫卡。 :d
答
您应该使用send_message功能是这样的:
producer.send_messages('test1', str(a))
我认为这是比较合适的。
+0
它需要在每个参数前加上一个字节'producer.send_messages(b'test1',b'str(i)')''符号,因为它有字节传输,并且这个原因在输入中格式化。 –
为什么要将字符串分割为单字符串然后连接它们?无论如何,写这行的“现代”方法是:message_method =“b”{}',b'{}'“.format(topic,a)'。 – TigerhawkT3
是啊,这仍然没有工作,错误 producer.send_messages(message_method) ... kafka.common.check_error(topic_metadata) 文件“/ usr/lib目录/python2.7/site-packages/kafka/common.py“,第233行,在check_error中 raise error_class(response) kafka.common.UnknownError:TopicMetadata(topic =”b'test1,b'0.23424'“,error = 17,partitions = [])' –
'文件 “simpleproducer.py”,第11行,在
哦,我不知道是什么原因导致了错误 - 我只是想给你一个更简洁的方式来写这个字符串。你现在在那里有相当于'print'('h'+'e'+'l'+'l'+'o'+''+'w'+'o'+'r'+'l' + 'd')'。 – TigerhawkT3