2015-07-15 3 views
1

Мне было интересно, есть ли лучший способ справиться с блокировками при импорте других модулей. Сейчас у меня есть это ...Пропускание замков в python

import ot1, ot2, ot3 
class Thread(threading.Thread): 
    def __init___(blah, blah): 

    def run(self): 
     data, my_lock = self.data, self.my_lock 
     return ot1.dostuff(data, my_lock) + ot2.dostuff(data, my_lock) + ot3.dostuff(data, my_lock) 
if __name__ == '__main__': 
    my_lock = threading.Lock() 
    for x in range(10): 
     Thread(data, my_lock) 

Потому что я импортировать вещи, которые я должен передать замок в новых областях, есть ли способ обойти эту проблему, как глобально объявить замок. Это сделает мой код намного чище.

+0

Функции 'dostuff' обеспечивают доступ к нескольким членам данных из вашего класса потоков (' data' и 'my_lock'). Имеет ли смысл, чтобы они были методами самого класса? –

+0

Не в этом случае, он становится довольно сложным в фоновом режиме, dostuff вызывает другие функции из других файлов. Если я поставлю все один файл, это будет несколько тысяч строк слишком долго. –

+0

Я думаю, было бы очень интересно узнать, почему ** блокировки используются в первую очередь. Не могли бы вы еще раз объяснить свой вариант использования? – dnozay

ответ

1

Python имеет переменный уровень модуля, если вы действительно хотите использовать их:

# main file, call it main.py 
lock = None 
if __name__ == '__main__': 
    lock = threading.Lock() 
    # launch threads without passing lock 

Тогда в любом другом файле, вы можете сделать:

# other files: 
from main import lock 

# use the lock... 

Если это решает быстро проблема, с которой вы имеете дело, а затем использовать ее. Но я бы не рекомендовал его для реального проекта программирования. Лучшая практика программирования заключается в том, что ваш код меньше полагается на глобальное состояние (например, на уровне модуля) и имеет более явно переданные параметры. Таким образом, вы всегда знаете, от чего зависит ваш код, и его можно использовать повторно.

Смежные вопросы