python中一个读写进程之间的通信
我正在寻找一种在python脚本的两个进程之间安全地传递信息的方法 一个进程只读取,另一个进程只写入。 我需要传递的数据是一本字典 到目前为止,我找到的最佳解决方案是本地SQL server(因为数据本身是一种表),我认为SQLite将安全地处理事务 有没有更好的方法,也许是一个模块,在文件被写入时锁定文件不被读取,反之亦然python中一个读写进程之间的通信,python,multithreading,locking,Python,Multithreading,Locking,我正在寻找一种在python脚本的两个进程之间安全地传递信息的方法 一个进程只读取,另一个进程只写入。 我需要传递的数据是一本字典 到目前为止,我找到的最佳解决方案是本地SQL server(因为数据本身是一种表),我认为SQLite将安全地处理事务 有没有更好的方法,也许是一个模块,在文件被写入时锁定文件不被读取,反之亦然 我正在使用linux Ubuntu11.10,但欢迎使用跨平台解决方案。要在进程之间传输数据,可以使用和。Python用于在对象和字节流之间进行转换 为了安全地传输数据,您
我正在使用linux Ubuntu11.10,但欢迎使用跨平台解决方案。要在进程之间传输数据,可以使用和。Python用于在对象和字节流之间进行转换 为了安全地传输数据,您需要确保数据只传输一次。这意味着:目的地进程需要能够说“我没有得到所有信息,请再次发送”,而发送方需要某种形式的收据
为了实现这一点,您应该在数据中添加一个“头”,为其提供一个唯一的键(可能是时间戳或哈希)。然后,接收方和发送方都可以保留已发送/看到的数据的列表,以避免两次处理数据。要在进程之间传输数据,可以使用和。Python用于在对象和字节流之间进行转换 为了安全地传输数据,您需要确保数据只传输一次。这意味着:目的地进程需要能够说“我没有得到所有信息,请再次发送”,而发送方需要某种形式的收据
为了实现这一点,您应该在数据中添加一个“头”,为其提供一个唯一的键(可能是时间戳或哈希)。然后,接收者和发送者都可以保留他们已发送/看到的对象的列表,以避免两次处理数据。对于单向通信,您可以使用例如或
多处理队列。SimpleQueue
共享内存也是使用多处理.Array
的一个选项。但您必须将字典拆分为至少两个数组(键和值)。只有当所有的值都是相同的基本类型时,这才有效
multiprocessing.Queue
和multiprocessing.Array
的优点在于它们都在内部受到锁的保护,因此您不必担心这一点。对于单向通信,您可以使用例如或multiprocessing.queues.SimpleQueue
共享内存也是使用多处理.Array
的一个选项。但您必须将字典拆分为至少两个数组(键和值)。只有当所有的值都是相同的基本类型时,这才有效
multi-processing.Queue
和multi-processing.Array
的优点在于它们都在内部受到锁的保护,因此您不必担心这一点。您尝试过套接字吗?或者可能?我不太明白信息传递与文件锁定之间的关系。我不想使用套接字,因为我的实现似乎有些过分。我需要传递的数据是一个大字典,所以我考虑将其写入数据库,以便于监控。不过,套接字还是值得考虑的。谢谢。有人知道它是否真的是关于多重处理的吗?我怀疑它实际上是多线程的,不是吗?@Eran它是关于多处理的。引用计数和GIL(全局解释器锁)的使用限制了python上线程的使用。您尝试过套接字吗?或者可能?我不太明白信息传递与文件锁定之间的关系。我不想使用套接字,因为我的实现似乎有些过分。我需要传递的数据是一个大字典,所以我考虑将其写入数据库,以便于监控。不过,套接字还是值得考虑的。谢谢。有人知道它是否真的是关于多重处理的吗?我怀疑它实际上是多线程的,不是吗?@Eran它是关于多处理的。引用计数和GIL(全局解释器锁)的使用限制了python上线程的使用。