2013-07-11 2 views
-1

У меня есть несколько классов (выполняется одновременно с использованием потоков). Все они должны получить доступ к одному словарю/объекту (содержащему значения конфигурации из базы данных и ссылки на все другие объекты, чтобы иметь возможность вызывать методы между двумя потоками)Общие данные между объектами класса

Что было бы лучшим способом реализовать это?
Должен ли я создать модуль, который хранит и получает данные?
Глобальная переменная?

Я довольно новыми для Python, и я чувствую, как им приближается это неправильный путь

Edit (небольшой пример сценария)

#!/usr/local/bin/python3.3 

class foo(threading.Thread): 
    def run(self): 
     # access config from here 
     y = bar(name='test').start() 

     while True: 
      pass 
    def test(self): 
     print('hello world') 

class bar(threading.Thread): 
    def run(self): 
     # access config from here 
     # access x.test() from here 

if __name__ == '__main__': 
    x = foo(name='Main').start() 
+1

Можете ли вы быть немного более конкретно? Это зависит от того, что вы пытаетесь реализовать. –

+0

@JoelCornett Я добавил небольшой пример. – peipst9lker

+0

Я все еще не совсем уверен, что вы пытаетесь выполнить, но мне кажется, что вы можете передать метод 'test' в' y', когда вы его создаете. Конечно, вам нужно будет изменить наследуемый конструктор 'bar .__ init __()', чтобы принимать и хранить аргументы. –

ответ

1

Если ваша программа является достаточно большой, с большим количеством глобальные данные, было бы неплохо создать модуль и разместить там все свои глобальные данные. Импортируйте этот модуль из других модулей и используйте его. Если программа мала, то, возможно, более подходящей является глобальная переменная. Я предполагаю, что это будет структура, доступная только для чтения, в противном случае все усложняется. Вот пример для первого случая (предположим Config является класс в файле global_mod.py):

from global_mod import Config 

class foo(threading.Thread): 
    def run(self): 
     # do something with cfg 
     y = bar(name='test').start() 

     while True: 
      pass 

    def test(self): 
     print('hello world') 

class bar(threading.Thread): 
    def run(self): 
     # do something with cfg 
     # access x.test() from here 

if __name__ == '__main__': 
    cfg = Config() 
    x = foo(name='Main').start()