Поведение членов класса при работе с потоками внутри класса

У меня есть код, который устанавливает обработчик прерывания в основном потоке и запускает цикл в стороннем потоке. Это делается для того, чтобы я мог нажать Ctrl-C для основного потока, чтобы сигнализировать циклу о корректном завершении работы, и все это происходит внутри одного класса, который выглядит так:

class MyClass:
    # non-relevant stuff omitted for brevity
    def run(self):
        with concurrent.futures.ThreadPoolExecutor() as executor:
            future = executor.submit(self.my_loop, self.arg_1, self.arg_2)
            try:
                future.result()
            except KeyboardInterrupt as e:
                self.exit_event.set()  # read in my_loop(), exits after finishing an iteration
                future.result()

Это прекрасно работает. Мой вопрос заключается в том, существуют ли особые типы объектов или характеристики объектов, о которых я должен знать при таком подходе, особенно в отношении себя. участники MyClass? Я думаю, это нормально, потому что my_loop порождается внутри MyClass, и поэтому нет копий самого себя. свойства сделаны - первоначальное тестирование указывает на то, что это так. Мне действительно интересно, есть ли какие-либо более экзотические объекты (например, не подвергающиеся травлению, которые отлично работают в этом), которые я должен рассмотреть?


person Madden    schedule 16.06.2020    source источник


Ответы (1)


Поскольку речь идет о потоках, а не об обмене данными между процессами, разборчивость не имеет значения, так как в очередях ничего не передается. Ваши объекты внутри вашего класса (или вне класса) могут быть чем угодно.

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

person Hannu    schedule 16.06.2020