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

8 投票
3 回答
6127 浏览
提问于 2025-04-16 20:18

我在用一个库,这个库可以让我的Python程序和一个外部程序进行交互。这样我就可以创建:

foo = Foo()

上面的代码会启动一个新的Foo程序实例,我可以在Python里面控制它。

我有一个Python脚本需要多次调用,并且根据外部参数,告诉同一个Foo程序实例去做不同的事情。显然,我不能每次都这样写:

foo = Foo()

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

我想做的是只创建一次foo = Foo(),然后让多个调用共享同一个实例。目前我在考虑只创建一次,然后把它序列化,再让我的脚本反序列化。这个方法可行吗?有没有更好的办法?

谢谢!!

3 个回答

0

你可以调整设计,让 Foo() 只是连接到一个已经存在的进程。然后你可以创建一个新的函数,叫它 startFoo(),这个函数你只需要调用一次(或者在 Foo() 失败的时候调用)。更好的做法是让 Foo() 连接的程序成为一个服务,通过套接字来连接。你也可以考虑直接使用多进程模块。

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)
3

如果你按照这个回答中提到的方法去做,就可以实现这个功能。或者你也可以使用Pyro,在这个回答中有对比它和多进程的内容。

撰写回答