我正在寻找一种在两个python脚本进程之间安全传递信息的方法。
一个进程只读,另一个只写。 我需要传递的数据是字典。
到目前为止,我找到的最佳解决方案是本地SQL服务器(因为数据本身就是一种表),我认为SQLite将安全地处理事务。
有没有更好的方法,也许是一个模块可以锁定文件在写入时被读取,反之亦然?
我正在使用linux ubuntu 11.10,但欢迎使用跨平台解决方案。
答案 0 :(得分:3)
要在流程之间传输数据,您可以使用pipes和sockets。 Python使用pickling在对象和字节流之间进行转换。
要安全地传输数据,您需要确保数据只传输一次。这意味着:当发件人需要某种形式的收据时,目标流程需要能够说“我没有得到所有内容,再次发送”。
要实现这一点,您应该为数据添加一个“标题”,为其提供唯一键(可能是时间戳或散列)。接收方和发送方都可以保留已发送/看到的列表,以避免两次处理数据。
答案 1 :(得分:1)
对于单向通信,您可以使用例如multiprocessing.Queue
或multiprocessing.queues.SimpleQueue
。
共享内存也是使用multiprocessing.Array
的选项。但是你必须在至少两个数组(键和值)中拆分字典。只有当所有值都具有相同的基本类型时,这才能正常工作。
关于multiprocessing.Queue
和multiprocessing.Array
的好处是它们都受到内部锁的保护,因此您不必担心这一点。