Python: как разделить экземпляр объекта между несколькими вызовами скрипта - PullRequest
7 голосов
/ 26 июня 2011

Я использую библиотеку, которая предоставляет интерфейс Python для внешней программы. Это позволяет мне создать:

foo = Foo()

Приведенный выше код запускает новый экземпляр программы Foo, которым я могу управлять из Python.

У меня есть скрипты на python, которые нужно вызывать несколько раз и, в зависимости от внешних параметров, предписывать одному экземпляру внешней программы Foo выполнять разные действия. Очевидно, я не могу сделать

foo = Foo() каждый раз,

, так как это создает новый экземпляр Foo каждый раз, когда запускается мой скрипт.

То, что я хочу сделать, - это создать foo= Foo() один раз, и у нескольких вызовов будет один и тот же экземпляр. В настоящее время я думаю о том, чтобы просто создать его один раз, сериализовать и сделать так, чтобы мои сценарии десериализовали его. Работает ли этот подход? Есть ли лучшая альтернатива?

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 26 июня 2011

Это можно сделать, если вы следуете подходу, подобному приведенному в в этом ответе .Или вы можете использовать Pyro , который сравнивается с многопроцессорной обработкой в ​​ этот ответ .

0 голосов
/ 26 июня 2011

Вы можете изменить дизайн так, чтобы Foo() просто связывал вас с существующим процессом, а затем вы создаете новую функцию, вызываете ее startFoo(), которую вы ранее вызывали один раз (или если Foo() не удается).Еще лучше было бы создать программу, которую Foo () подключает к службе, к которой вы подключаетесь через сокет.Вы также можете просто переключиться на многопроцессорный модуль.

0 голосов
/ 26 июня 2011

Возможно, вы сможете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...