如何在python实例之间传递对象

时间:2011-12-14 06:17:01

标签: python

我有一个基因表达树程序来控制机器人。我有一个GP.py和一个MyBot.py。我需要能够让MyBot.py访问在GP.py中创建的对象

GP.py通过os.system()命令启动MyBot.py

我在GP.py文件中有数百个树对象,而MyBot.py需要对它们进行评估。

我无法将两者合并为一个.py文件,因为MyBot.py的新实例被执行了数千次,但GP.py需要评估MyBot.py与每棵树的适应性。

我知道如何使用import GP.py导入方法和类定义,但我需要Tree类对象的特定实例 有关如何将此树从第一个实例发送到第二个实例的任何想法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用pickle模块(或者json?)序列化对象

如果你真的想坚持使用os.system,那么你可以让MyBot.py将pickle对象写入一个文件,一旦MyBot.py返回,GP.py可以读取该文件。

如果您使用子进程模块,那么您可以让MyBot.py将pickled对象写入stdout,GP.py可以通过管道读取它。

如果您使用多处理模块,那么您可以生成MyBot进程并在Queue实例上来回传递数据。

答案 1 :(得分:0)

通常在这种情况下使用RPC。在python中我通常使用XML-RPC:

http://docs.python.org/library/simplexmlrpcserver.html

http://twistedmatrix.com/documents/current/web/howto/xmlrpc.html

这是一种比通过文件传递数据更灵活的解决方案,即使进程位于不同的计算机上也能正常工作。

答案 2 :(得分:0)

我们正在开发一个ORB交互框架Versile Python(AGPL),它可以用于这种进程间对象级通信。它正在开发中,但你可能想看看。这个recipe显示了如何在GP.py和MyBot.py之间使用管道来访问远程对象。您可以使用native python对象的链接直接访问python对象,或编写自定义external objects