gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:28:08 26 4
gpt4 key购买 nike

我有一个复杂的数据结构(用户定义类型),在该数据结构上执行大量独立计算。数据结构基本上是不可变的。我说基本上,因为尽管接口(interface)看起来是不可变的,但在内部正在进行一些惰性评估。一些延迟计算的属性存储在字典中(通过输入参数返回代价函数的值)。我想使用 Python multiprocessing模块来并行化这些计算。我心里有两个问题。

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

提前感谢您的任何回答、评论或有启发性的问题!

最佳答案

How do I best share the data-structure between processes?

管道。

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 ) )

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

Is there a way to handle the lazy-evaluation problem without using locks (multiple processes write the same value)?

管道。

关于python - 在 Python 中的进程之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com