我正在尝试通过 zmq ipc 套接字发送现有的字典,我可以使用此代码发送字符串,但我无法发送字典对象
import zmq, datetime
d = {0: ('356612022462768', 'EVENT', 0, '2012-12-26 15:50:16', -20.22216, -70.13723, 6.44, 134.0, 1, 2, '18743230', datetime.datetime(2013, 2, 10, 9, 6, 2, 362734))}
if __name__ == "__main__":
context = zmq.Context()
publisher = context.socket(zmq.PUB)
publisher.connect("ipc://shared")
while True:
publisher.send( d )
time.sleep( 1 )
TypeError: {0: ('356612022462768', 'EVENT', 0, '2012-12-26 15:50:16',
-20.22216, -70.13723, 6.44, 134.0, 1, 2, '18743230',
datetime.datetime(2013, 2, 10, 9, 6, 2, 362734))}
does not provide a buffer interface.
我该怎么做?
您需要序列化数据,可能会序列化为 JSON,具体取决于用例。你不能按原样发送它,你需要一个字符串表示
import json
myjson = json.dumps(d)
但是 datetime 对象不能简单地转换为 json,因此您必须单独处理它,这篇文章将对此有所帮助:Python 和 JavaScript 之间的 JSON 日期时间
这里是您问题的解决方案:
import zmq, datetime
import json
d = {0: ('356612022462768', 'EVENT', 0, '2012-12-26 15:50:16', -20.22216, -70.13723, 6.44, 134.0, 1, 2, '18743230', datetime.datetime(2013, 2, 10, 9, 6, 2, 362734))}
if __name__ == "__main__":
context = zmq.Context()
publisher = context.socket(zmq.PUB)
publisher.connect("ipc://shared")
while True:
publisher.send_string(json.dumps(d))
time.sleep( 1 )
注意:
json.dumps
为您提供一个字符串,因此您应该使用send_string
而不是send
。