python使用threading类而不再使用_thread类,下划线表示这是内部类,不应在外部使用
多线程是如何运行的?
1、首先线程需要依附于进程,也就是执行任何脚本的时候,都会有一个python进程,然后这个进程下会有一个主线程(线程是程序运行的最小单位)
2、开启2个子线程运行,这个时后一共有三个线程在运行,1个主线程和2个子线程,他们有可能出现主线程先结束,也有可能出现子线程先结束。
3、所以一般我们需要使用thread1.join()方法,让主线程等待子线程结束后,再执行下一步。
4、如果我们开一个线程,就join一次,相当于没有使用多线程,因为我们等待一个线程结束后,才开启下一个。正确的方法应该是一次性启动多个线程(如果是io密集型),然后一起等待,等所有线程都join再进行下一步
使用方法:
1、集成threading.Thread类
2、实现run方法
3、创建实例,并调用start(),这个函数会执行run方法
使用模板:
import threading
import time
class myThread (threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self) # 必须有,初始化线程
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
print ("开始线程:" + self.name)
print_time(self.name, self.counter, 5)
print ("退出线程:" + self.name)
def print_time(threadName, delay, counter):
while counter:
time.sleep(delay)
print ("%s: %s" % (threadName, time.ctime(time.time())))
counter = counter - 1
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print ("退出主线程")
这样的方法需要频繁开启和关闭线程,会消耗资源,而且不能控制最大并发。
合理的方式应该是使用线程池来控制,一次性分配多个线程,然后让任务排队进入线程池里执行