Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中一个读写进程之间的通信_Python_Multithreading_Locking - Fatal编程技术网

python中一个读写进程之间的通信

python中一个读写进程之间的通信,python,multithreading,locking,Python,Multithreading,Locking,我正在寻找一种在python脚本的两个进程之间安全地传递信息的方法 一个进程只读取,另一个进程只写入。 我需要传递的数据是一本字典 到目前为止,我找到的最佳解决方案是本地SQL server(因为数据本身是一种表),我认为SQLite将安全地处理事务 有没有更好的方法,也许是一个模块,在文件被写入时锁定文件不被读取,反之亦然 我正在使用linux Ubuntu11.10,但欢迎使用跨平台解决方案。要在进程之间传输数据,可以使用和。Python用于在对象和字节流之间进行转换 为了安全地传输数据,您

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

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

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

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


我正在使用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上线程的使用。