Python:如何跨脚本的多个调用共享对象实例

时间:2011-06-26 01:34:35

标签: python object-persistence object-sharing

我使用的库为外部程序提供python接口。这允许我创建:

foo = Foo()

上面的代码启动了一个我可以在python中控制的Foo程序的新实例。

我有一个需要多次调用的python脚本,并且根据外部参数,告诉外部Foo程序的单个实例做不同的事情。显然我做不到

每次

foo = Foo()

因为每次我的脚本运行时都会创建一个新的Foo实例。

我想要做的是创建foo= Foo()一次,并让多个调用共享同一个实例。目前我只想创建一次,序列化它,并让我的脚本反序列化它。这种方法有效吗?还有更好的选择吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

如果您采用类似于this answer中给出的方法,则可以执行此操作。或者您可以使用Pyro,将其与this answer中的多处理进行比较。

答案 1 :(得分:0)

您可以使用pickle。这是一个简单的例子:

import os, pickle

class Foo(object):
    def __init__(self, bar):
        self.bar = bar

# use previous pickled instance if found
if os.path.exists('foo.pickle'):
    with open('foo.pickle') as f:
        foo = pickle.load(f)
else:
    foo = Foo(42)

# print current foo.bar
print foo.bar

# change foo.bar and pickle
foo.bar = raw_input('new bar: ')
with open('foo.pickle', 'w') as f:
    pickle.dump(foo, f)

答案 2 :(得分:0)

您可以更改设计,以便Foo()只是将您连接到现有流程,然后创建一个新功能,将其称为startFoo(),之前您调用过一次(或{{1} }失败)。更好的方法是使Foo()连接到通过套接字连接的服务的程序。您可能还想切换到多处理模块。