Python机器学习与可视化分析实战
上QQ阅读APP看书,第一时间看更新

1.3.1 threading模块中的Thread类

Thread是threading模块中最重要的类之一,可以使用它来创建线程。具体使用方法是创建一个threading.Thread对象,在它的初始化函数中将需要调用的对象作为初始化参数传入,具体代码如程序1-2所示。

【程序1-2】

    # coding = utf8
    import threading,time
    count = 0
    class MyThread(threading.Thread):
       def __init__(self,threadName):
           super(MyThread,self).__init__(name = threadName)
      
       def run(self):
           global count
           for i in range(100):
           count = count + 1
           time.sleep(0.3)
           print(self.getName() , count)
    for i in range(2):
       MyThread("MyThreadName:" + str(i)).start()

【代码解析】

在上面代码定义的MyThread类中,重写了从父对象继承的run方法;在run方法中,将一个全局变量的值逐次加1;在接下来的代码中,创建了2个独立的对象,分别调用了其start方法,最后逐一打印结果。

可以看到,程序中每个线程被赋予了一个名字,然后设置每隔0.3秒打印输出本线程的计数,即计数加1。而count被设置成全局共享变量,因此在每个线程中都可以自由地对其进行访问。

程序运行结果如图1.16所示。

从上面的结果可以看到,每个线程被起了一个对应的名字,而在运行时,线程所计算的计数被同时增加,这样可以证明,在程序运行过程中两个线程同时对一个数进行操作,并打印其结果。

提示:程序中的run方法和start方法,并不是threading自带的方法,而是从Python本身的线程处理模块Thread中继承来的。run方法的作用是在线程启动以后,执行预先写入的程序代码。一般而言,run方法所执行的内容被称为Activity。而start方法是用于启动线程。

图1.16