在类内进行线程化时类成员的行为

问题描述 投票:0回答:1

我有一些代码可以在主线程中设置中断处理程序,并在侧线程中运行循环。这样一来,我可以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内部生成的,因此没有自我的副本。属性-最初的测试指出了这种情况。我真的在想是否应该考虑其他奇特的对象(例如,不可刺的,在这种情况下可以正常工作)?

python python-multithreading
1个回答
0
投票

因为这是线程而不是进程之间的通信,所以可伸缩性无关紧要,因为队列中没有任何传输。您的班级内(或班级外)的对象可以是任何对象。

您唯一需要记住的类变量是,您需要一个锁来保护对它们的访问。如果您使用多个线程来修改类变量,则最终结果将是意外的。

© www.soinside.com 2019 - 2024. All rights reserved.