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

Python:如何跨脚本的多个调用共享对象实例,python,object-persistence,object-sharing,Python,Object Persistence,Object Sharing,我正在使用一个为外部程序提供python接口的库。这使我能够创建: foo = Foo() 上面的代码启动了Foo程序的一个新实例,我可以从python中控制它 我有一个python脚本,它需要多次调用,并且根据外部参数,告诉外部Foo程序的单个实例执行不同的操作。显然我做不到 foo=foo()每次 因为每次我的脚本运行时都会创建一个新的Foo实例 我想做的是创建一次foo=foo(),并让多个调用共享同一个实例。目前我正在考虑只创建一次,序列化它,然后让我的脚本反序列化它。这种方法有效吗?

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

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对象。