7

私は外部プログラムへのPythonインターフェースを提供するライブラリを使用しています。これにより、次のものを作成できます。

foo = Foo()

上記のコードは、Python内から制御できるFooプログラムの新しいインスタンスを開始します。

複数回呼び出す必要のあるPythonスクリプトがあり、外部パラメーターに応じて、外部Fooプログラムの単一のインスタンスにさまざまなことを実行するように指示します。明らかに私にはできません

foo = Foo()毎回、

これは、スクリプトが実行されるたびにFooの新しいインスタンスが作成されるためです。

私がやりたいのは、foo= Foo()一度作成して、複数の呼び出しで同じインスタンスを共有することです。現在、私はそれを一度作成し、シリアル化し、スクリプトに逆シリアル化させることを考えています。このアプローチは機能しますか?より良い代替案はありますか?

ありがとう!!

4

3 に答える 3

3

これは、この回答に示されているのと同様のアプローチに従えば実行できます。または、この回答でマルチプロセッシングと比較されているPyroを使用することもできます。

于 2011-06-26T01:43:58.200 に答える
0

設計を変更しFoo()て、既存のプロセスに接続するだけで、新しい関数を作成し、startFoo()以前に一度呼び出した関数を呼び出します (またはFoo()失敗した場合)。さらに良いのは、ソケットを介して接続するサービスに Foo() が接続するプログラムを作成することです。multiprocessing モジュールに切り替えることもできます。

于 2011-06-26T05:31:55.303 に答える
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)
于 2011-06-26T02:44:39.953 に答える