我正在开发一个大型的ishpython代码库,它已经存在了十多年了。所讨论的应用程序利用forking实现并行性。在
基本前提是用户要求程序建立一个特定的目标,我们计算出目标的依赖关系图,然后从构建图中的拓扑划分中找出一些可以并行执行的任务。然后我们派生一些进程以并行地执行这些任务(从分区)。在
一切都很管用。不过,我想重构它而不是依赖fork()
。尤其是,子进程中主进程对状态的依赖性是一个问题。在
重构有两个激励因素:
问题是,分叉进程(由主进程设置)当前使用的大量数据结构不容易序列化(也不能推断出它们用于子进程的构造)。开放文件描述符就是这样一个例子,依赖于对象标识(构建图)是另一个例子。在
基本上,我在寻找如何最好地整体解决这个问题的建议。在
我建议遵循以下范例
Master是一个单独的进程,负责所有的依赖关系解析、图划分等,直至单个、单独的作业。因此只有一个系统状态副本。在
使用}卸载这些叶作业。在
subprocess
或multiprocessing
或{卸载机制越简单,平台独立性越强:)
叶当然是异步的,因此您需要一个框架来处理异步通知,您可以使用}的库。如果你是真正的铁杆,
gevent
或实现{twisted
。python3.x还引入了asyncio
,这可能很有用。在您还可以使用带有特殊通知的资源/执行器池,例如post-order tranversal,我认为可以相对简单地使用递归函数或递归生成器来实现。在
相关问题 更多 >
编程相关推荐