python3 多线程-线程异步
python3有threading和_thread两种线程写法,推荐使用threading。
开多线程就是为了使用多线程的异步能力来同时执行多个线程。
1. threading方法:
以下代码可以执行异步或者同步线程。
1 import threading 2 import time 3 4 5 class my_thread(threading.Thread): 6 def __init__(self, th_id, th_name): 7 threading.Thread.__init__(self) 8 self.th_id = th_id 9 self.th_name = th_name 10 pass 11 12 def run(self): 13 print("开始线程:" + self.th_name) 14 run_func(self.th_name) 15 print("退出线程:" + self.th_name) 16 17 pass 18 19 20 exitFlag = 0 21 22 23 def run_func(th_name): 24 if exitFlag: 25 th_name.exit() 26 pass 27 else: 28 # print('运行线程:' + th_name) 29 do(th_name) 30 pass 31 print('---%s---' % (time.ctime(time.time()))) 32 # time.sleep(0.1) 33 pass 34 35 36 # 自定义,在此定义你要运行的参数 37 def do(th_name): 38 print('---执行自定义函数---') 39 40 pass 41 42 43 def index(sync): 44 print('开始创建线程。。') 45 for create in range(0, 2000): 46 # 创建新线程 47 th = my_thread(create, "Thread-" + str(create)) # id, name 48 th.start() 49 if sync: # 线程同步异步开关,True/False 50 th.join() # 线程等待,执行完才能进入下一个线程 51 pass 52 else: # 异步,推荐 53 pass 54 pass 55 print('\n所有线程创建完毕。。') 56 pass 57 58 59 index(False) # 同步线程True,异步线程False(推荐)
2. _thread方法(程序要求不高的话推荐这种老写法):
1 import _thread 2 3 4 all_thread_num = 0 5 6 7 def page_class(cla, that_num): 8 print("已启动线程=" + str(that_num)) 9 global all_thread_num 10 all_thread_num += 1 11 print("线程总数=" + str(all_thread_num)) 12 for page in range(1, 30): 13 print("内=" + str(page)) 14 pass 15 pass 16 17 18 for cla in range(20190, 20291): # 创建线程 19 try: 20 _thread.start_new_thread(page_class, (cla, (cla - 20000))) 21 pass 22 except: 23 print("无法启动线程") 24 pass 25 pass 26 27 while 1: 28 pass