我有80%的Google协议缓冲区在Python3中工作.我的.proto文件工作,我编码数据,生活几乎是好的.问题是我不能将ParseFromString作为SerializeToString的结果.当我打印SerializeToString时,它看起来像我期望的,一个相当紧凑的二进制表示(前面是b').
我的猜测是,这可能与Python2和Python3处理字符串的方式不同.SerializeToString的putput是Bytes,而不是字符串.
SerializeToString的打印输出(Python类型是):
b'\x10\xd7\xeb\x8e\xcd\x04\x1a\x0cnamegoeshere2@\x08\x80\xf8\xde\xc3\x9f\xb0\x81\x89\x14\x11\x00\x00\x00\x00\x00\x80d\xc0\x19\x00\x00\x00\x00\x00\xc0m@!\x00\x00\x00\x00\x00\x80R\xc0)\x00\x00\x00\x00\x00x\xb7\xc01\x00\x00\x00\x00\x00\x8c\x95@9\x00\x00\x00\x00\x00\x16\xb2@'
Run Code Online (Sandbox Code Playgroud)
ParseFromString(消息)的结果:
None
Run Code Online (Sandbox Code Playgroud)
没有提供错误......
所以 - 我最好的猜测是我需要做的就是.decode()生成的字节对象,问题是我不知道编码是什么.我尝试过UTF-8,-16,Latin-1和其他一些没有成功的人.我的Google-Fu很强大,但我没有找到任何相关内容.
任何帮助,将不胜感激.
所有,我正在尝试调整 RabbitMQ 队列的参数,试图限制增长。我注意到 x-max-length 参数按预期工作,但是当我更改为 x-max-length 字节时,情况并非如此。
请参阅下面的示例,我们可以看到为队列正确列出的参数,但您可以看到正在发生无限制的增长,并且队列的内存占用量为 421MB,而我将其设置为仅 1MB。
关于为什么会发生这种情况有什么想法吗?
感谢致敬。
作为一些性能评估的一部分,我正在执行重复更新操作以将文档添加到MongoDB中.基于我正在执行的更新(w/upserts)的数量,我发现了执行时间的巨大非线性:
在Python中使用以下命令循环...
collection.update({'timestamp': x}, {'$set': {'value1':y, v1 : y/2, v2 : y/4}}, upsert=True)
Run Code Online (Sandbox Code Playgroud)
给我这些结果......
500 document upserts 2 seconds.
1000 document upserts 3 seconds.
2000 document upserts 3 seconds.
4000 document upserts 6 seconds.
8000 document upserts 14 seconds.
16000 document upserts 77 seconds.
32000 document upserts 280 seconds.
Run Code Online (Sandbox Code Playgroud)
请注意,在8k文档更新后,性能开始迅速降低,并且通过32k文档更新,我们看到吞吐量降低了6倍.为什么是这样?看起来奇怪的是,连续8次"手动"运行4k文档更新将比连续执行所有这些更新快6倍.
我已经看到在mongostats中我得到了一个可笑的高锁定数据库比率(> 100%),并且top在运行时显示我> 85%的CPU使用率.我有一个i7处理器,可以为VM提供4个内核.