我使用的库为外部程序提供python接口。这允许我创建:
foo = Foo()
上面的代码启动了一个我可以在python中控制的Foo程序的新实例。
我有一个需要多次调用的python脚本,并且根据外部参数,告诉外部Foo程序的单个实例做不同的事情。显然我做不到
每次 foo = Foo()
,
因为每次我的脚本运行时都会创建一个新的Foo实例。
我想要做的是创建foo= Foo()
一次,并让多个调用共享同一个实例。目前我只想创建一次,序列化它,并让我的脚本反序列化它。这种方法有效吗?还有更好的选择吗?
谢谢!
答案 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()连接到通过套接字连接的服务的程序。您可能还想切换到多处理模块。