我正在实现Python C扩展,我希望我的自定义对象支持buffer protocol。缓冲区协议实质上允许容器对象以受控且明确定义的方式将原始指针暴露给它们的内存。使用者传递了许多标志,指示它准备处理什么样的内存,导出器返回描述内存的结构。
我对PyBUF_WRITABLE
标志特别感兴趣:
PyBUF_WRITABLE
控制只读字段。如果设置,导出器必须提供可写缓冲区或报告失败。否则,导出器可以提供只读或可写缓冲区,但选择必须对所有消费者都是一致的。
我的对象是observable,但这自然会与将可写指针分发到原始内存相冲突,所以如果我有任何活动的观察者,我只能分发只读缓冲区,如果我有任何活动的可写缓冲区,我无法注册任何观察者。
我想默认发出只读缓冲区,并且只在被问到时提供可写缓冲区,但我不确定这是否合法。我可以看到这句话有两种可能的解释:
哪种解释是正确的?
答案 0 :(得分:1)
重要的部分是:
否则,出口商可能提供只读或可写 缓冲区,但选择必须一致
选择.. 这个选择,因为第一种情况是没有选择...必须与每个消费者保持一致,而不是事物。
如果设置了该字段,则必须提供可写缓冲区。没有选择,因为无论出于何种原因技术无法做到这一点别无选择。 如果没有设置,它仍然是可写的,但是对于所有没有设置标志的人来说它必须是可写的。