Python:示例说明...为什么这样做?

时间:2012-02-15 08:53:05

标签: python multithreading oop class

我一直在使用python徘徊一段时间,我最近想出了一些涉及多线程的东西......没有进一步的麻烦...继续我所拥有的......

import pythoncom
import wmi
import threading

class Info(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        pythoncom.CoInitialize()
        c = wmi.WMI()
        detect = c.Win32_ComputerShutdownEvent.watch_for()
        detect()
        return

if __name__ == '__main__':
    Info().start()
    for process in c.Win32_Process(Name="something.exe"):
        result = process.Terminate()

所以我的问题是......为什么这样做?这可能是关于线程继承过程的整体问题。线程...但是在类Info()中没有start()def,那么为什么运行def开始呢?

这实际上是一个非常方便的应用程序我需要用来停止一个应用程序,当Windows关闭时似乎总是挂起...发现Windows关闭事件发生时有点头疼但幸运的是,金色的杰作拯救了一天!

3 个答案:

答案 0 :(得分:4)

因为it's defined in the parent。如果在子类中找不到(或处理过)子类,则检查父类的属性。

答案 1 :(得分:2)

Thread的子类在您呼叫run()时自动呼叫他们的start()。开始在Thread中定义。

来自docs

  

有两种方法可以指定活动:将可调用对象传递给构造函数,或者通过覆盖子类中的run()方法。

以及start()

上的文档
  

它安排在一个单独的控制线程中调用对象的run()方法。

答案 2 :(得分:1)

你是否打算在杀戮过程之前等待线程结束? 如果是这样的话:

if __name__ == '__main__':
    info = Info()
    info.start()
    info.join()
    for process in c.Win32_Process(Name="something.exe"):
        result = process.Terminate()