在python中的一个Read和一个Write进程之间进行通信

时间:2012-09-10 07:06:24

标签: python multithreading locking

我正在寻找一种在两个python脚本进程之间安全传递信息的方法。

一个进程只读,另一个只写。 我需要传递的数据是字典。

到目前为止,我找到的最佳解决方案是本地SQL服务器(因为数据本身就是一种表),我认为SQLite将安全地处理事务。

有没有更好的方法,也许是一个模块可以锁定文件在写入时被读取,反之亦然?

我正在使用linux ubuntu 11.10,但欢迎使用跨平台解决方案。

2 个答案:

答案 0 :(得分:3)

要在流程之间传输数据,您可以使用pipessockets。 Python使用pickling在对象和字节流之间进行转换。

要安全地传输数据,您需要确保数据只传输一次。这意味着:当发件人需要某种形式的收据时,目标流程需要能够说“我没有得到所有内容,再次发送”。

要实现这一点,您应该为数据添加一个“标题”,为其提供唯一键(可能是时间戳或散列)。接收方和发送方都可以保留已发送/看到的列表,以避免两次处理数据。

答案 1 :(得分:1)

对于单向通信,您可以使用例如multiprocessing.Queuemultiprocessing.queues.SimpleQueue

共享内存也是使用multiprocessing.Array的选项。但是你必须在至少两个数组(键和值)中拆分字典。只有当所有值都具有相同的基本类型时,这才能正常工作。

关于multiprocessing.Queuemultiprocessing.Array的好处是它们都受到内部锁的保护,因此您不必担心这一点。