繁体   English   中英

在Python中的进程之间共享数据

[英]Sharing data between processes in Python

我有一个复杂的数据结构(用户定义的类型),在其上执行大量的独立计算。 数据结构基本上是不可变的。 我基本上说,因为虽然界面看起来是不可变的,但内部有一些懒惰的评估正在进行中。 一些延迟计算的属性存储在字典中(通过输入参数返回昂贵函数的值)。 我想使用Pythons 多处理模块来并行化这些计算。 我脑子里有两个问题。

  1. 如何在流程之间最好地共享数据结构?
  2. 有没有办法在不使用锁的情况下处理惰性求值问题(多个进程写入相同的值)?

提前感谢您的任何答案,评论或启发性问题!

如何在流程之间最好地共享数据结构?

管道。

origin.py | process1.py | process2.py | process3.py

打破您的程序,以便每个计算都是以下形式的单独过程。

def transform1( piece ):
    Some transformation or calculation.

对于测试,您可以像这样使用它。

def t1( iterable ):
    for piece in iterable:
        more_data = transform1( piece )
        yield NewNamedTuple( piece, more_data )

要在单个过程中重现整个计算,您可以执行此操作。

for x in t1( t2( t3( the_whole_structure ) ) ):
    print( x )

您可以使用一点文件I / O包装每个转换。 Pickle适用于此,但其他表示(如JSON或YAML)也运行良好。

while True:
    a_piece = pickle.load(sys.stdin)
    more_data = transform1( a_piece )
    pickle.dump( NewNamedTuple( piece, more_data ) )

每个处理步骤都成为独立的OS级进程。 它们将同时运行并立即消耗所有操作系统级资源。

有没有办法在不使用锁的情况下处理惰性求值问题(多个进程写入相同的值)?

管道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM