本文共 2623 字,大约阅读时间需要 8 分钟。
python中使用线程有两种方式:函数或者用类来包装线程对象。
Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。
_thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。
threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法:
除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程。语法如下:
_thread.start_new_thread ( function, args[, kwargs] )
参数说明:
#!/usr/bin/python3import _threadimport timedef print_time(thread_name, delay): """ 为线程定义一个函数 :param thread_name: :param delay: :return: """ count = 0 while count < 5: time.sleep(delay) count += 1 print("%s: %s" % (thread_name, time.ctime(time.time())))if __name__ == '__main__': # 创建两个线程 try: _thread.start_new_thread(print_time, ("Thread-1", 2,)) # def start_new_thread(function, args, kwargs=None) _thread.start_new_thread(print_time, ("Thread-2", 4,)) except: print("Error: 无法启动线程") # 加这个目的是为了看到输出 while 1: pass
运行结果如下:
2个线程一个循环5次,
Thread-1 每2秒循环一次输出(2,4,6,8,10)
Thread-2 每4秒循环一次输出(4,8,12,16,20)
我们可以通过直接从 threading.Thread 继承创建一个新的子类,并实例化后调用 start() 方法启动新线程,即它调用了线程的 run() 方法:
#!/usr/bin/python3import threadingimport timeexitFlag = 0class MyThread (threading.Thread): def __init__(self, thread_id, name, counter): """ :param thread_id: :param name: :param counter: """ threading.Thread.__init__(self) self.threadID = thread_id self.name = name self.counter = counter def run(self): """ :return: """ print("开始线程:" + self.name) print_time(self.name, self.counter, 5) print("退出线程:" + self.name)def print_time(thread_name, delay, counter): while counter: if exitFlag: thread_name.exit() time.sleep(delay) print("%s: %s" % (thread_name, time.ctime(time.time()))) counter -= 1if __name__ == '__main__': # 创建新线程 thread1 = MyThread(1, "Thread-1", 1) thread2 = MyThread(2, "Thread-2", 2) # 开启新线程 thread1.start() thread2.start() thread1.join() thread2.join() print("退出主线程")
运行结果如下:
运行结果如下:
2个线程一个循环5次,
Thread-1 每1秒循环一次输出(1,2,3,4,5),退出
Thread-2 每42秒循环一次输出(2,4,6,8,10),退出
转载地址:http://ntgwb.baihongyu.com/