7

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

foo = Foo()

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

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

foo = Foo()每次,

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

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

谢谢!!

4

3 回答 3

3

如果您遵循类似于此答案中给出的方法,则可以做到这一点。或者您可以使用Pyro ,它与此答案中的 multiprocessing 相比。

于 2011-06-26T01:43:58.200 回答
0

您可以更改设计,以便Foo()将您连接到现有流程,然后创建一个新函数,调用startFoo()您之前调用一次(或者如果Foo()失败)的函数。更好的办法是让 Foo() 连接到您通过套接字连接到的服务的程序。您可能还想切换到多处理模块。

于 2011-06-26T05:31:55.303 回答
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)
于 2011-06-26T02:44:39.953 回答