Python:如何跨脚本的多个调用共享对象实例
我正在使用一个为外部程序提供python接口的库。这使我能够创建:Python:如何跨脚本的多个调用共享对象实例,python,object-persistence,object-sharing,Python,Object Persistence,Object Sharing,我正在使用一个为外部程序提供python接口的库。这使我能够创建: foo = Foo() 上面的代码启动了Foo程序的一个新实例,我可以从python中控制它 我有一个python脚本,它需要多次调用,并且根据外部参数,告诉外部Foo程序的单个实例执行不同的操作。显然我做不到 foo=foo()每次 因为每次我的脚本运行时都会创建一个新的Foo实例 我想做的是创建一次foo=foo(),并让多个调用共享同一个实例。目前我正在考虑只创建一次,序列化它,然后让我的脚本反序列化它。这种方法有效吗?
foo = Foo()
上面的代码启动了Foo程序的一个新实例,我可以从python中控制它
我有一个python脚本,它需要多次调用,并且根据外部参数,告诉外部Foo程序的单个实例执行不同的操作。显然我做不到
foo=foo()
每次
因为每次我的脚本运行时都会创建一个新的Foo实例
我想做的是创建一次foo=foo()
,并让多个调用共享同一个实例。目前我正在考虑只创建一次,序列化它,然后让我的脚本反序列化它。这种方法有效吗?有更好的选择吗
谢谢 如果您遵循与中给出的方法类似的方法,则可以执行此操作。或者您可以使用,这与中的多处理相比。您可能可以使用。下面是一个简单的例子:
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()连接的程序通过套接字连接到服务。您可能还想切换到多处理模块 我试着这么做,实际上,我收到一条消息说“不能pickle‘lock’object:”。我现在正在研究它。是的,它有一些限制,你可能/可能无法绕过这些限制来做你想做的事情:如果你使用锁,你可能需要使用另一条路径,比如套接字或管道来提供对类的锁定访问。是的,我想这就是我必须做的,因为我不能轻松地序列化Foo对象。