Python:如何在脚本的多个调用中共享一个对象实例
我使用一个为外部程序提供python接口的库。 这使我可以创建:
foo = Foo()
上面的代码启动了一个新的Foo程序实例,我可以在python中进行控制。
我有一个需要多次调用的python脚本,并且根据外部参数,告诉外部Foo程序的一个实例做不同的事情。 很明显,我做不到
foo = Foo()
每次,
因为每次脚本运行时都会创建一个Foo的新实例。
我想要做的是创建foo= Foo()
一次,并让多个调用共享同一个实例。 目前我只想创建一次,序列化它,并让我的脚本反序列化它。 这种方法有效吗? 有更好的选择吗?
谢谢!!
如果您遵循类似于此答案中给出的方法,则可以完成此操作。 或者你可以使用Pyro,它与这个答案中的多处理相比。
你可能会使用泡菜。 这里有一个简单的例子:
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)
您可以更改设计,以便Foo()
将您连接到现有流程,然后创建一个新函数,将其startFoo()
,您之前调用该函数一次(或者如果Foo()
失败)。 更好的做法是让Foo()连接到通过套接字连接的服务的程序。 您可能还想切换到多处理模块。
上一篇: Python: how to share an object instance across multiple invocations of a script
下一篇: How to handle the nodejs EMFILE exception without modifying ulimit?