Bjö*_*lex 6 python sharing lazy-evaluation multiprocessing
我有一个复杂的数据结构(用户定义的类型),在其上执行大量的独立计算.数据结构基本上是不可变的.我基本上说,因为虽然界面看起来是不可变的,但内部有一些懒惰的评估正在进行中.一些延迟计算的属性存储在字典中(通过输入参数返回昂贵函数的值).我想使用Pythons 多处理模块来并行化这些计算.我脑子里有两个问题.
提前感谢您的任何答案,评论或启发性问题!
如何在流程之间最好地共享数据结构?
管道.
origin.py | process1.py | process2.py | process3.py
Run Code Online (Sandbox Code Playgroud)
打破您的程序,以便每个计算都是以下形式的单独过程.
def transform1( piece ):
Some transformation or calculation.
Run Code Online (Sandbox Code Playgroud)
对于测试,您可以像这样使用它.
def t1( iterable ):
for piece in iterable:
more_data = transform1( piece )
yield NewNamedTuple( piece, more_data )
Run Code Online (Sandbox Code Playgroud)
要在单个过程中重现整个计算,您可以执行此操作.
for x in t1( t2( t3( the_whole_structure ) ) ):
print( x )
Run Code Online (Sandbox Code Playgroud)
您可以使用一点文件I/O包装每个转换.Pickle适用于此,但其他表示(如JSON或YAML)也运行良好.
while True:
a_piece = pickle.load(sys.stdin)
more_data = transform1( a_piece )
pickle.dump( NewNamedTuple( piece, more_data ) )
Run Code Online (Sandbox Code Playgroud)
每个处理步骤都成为独立的OS级进程.它们将同时运行并立即消耗所有操作系统级资源.
有没有办法在不使用锁的情况下处理惰性评估问题(多个进程写入相同的值)?
管道.
| 归档时间: |
|
| 查看次数: |
2071 次 |
| 最近记录: |