Поведение членов класса при потоковой передаче внутри класса - PullRequest
0 голосов
/ 16 июня 2020

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

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_l oop создается внутри MyClass, и поэтому никаких копий себя. свойства сделаны - первоначальное тестирование показывает, что это так. Мне действительно интересно, есть ли еще объекты exoti c (например, не маринованные, что отлично работает в этом случае), которые я должен рассмотреть?

1 Ответ

0 голосов
/ 16 июня 2020

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

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

...