1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:woshinidaye 4 5 #线程:执行单位 6 #进程:资源单位,每一个进程至少要有一个线程 7 #下面这个就是单线程,先预定义函数func,然后执行if,遇到func()函数执行,然后在执行主程序里面的打印 8 ''' 9 def func(): 10 for i in range(10): 11 print('in func', i) 12 if __name__ == '__main__': 13 func() 14 for i in range(10): 15 print('main',i) 16 ''' 17 18 #将上述函数变成多线程 19 from threading import Thread #创建线程类 20 21 #方法一 22 ''' 23 def func(name): 24 for i in range(9999): 25 print(name, i) 26 if __name__ == '__main__': 27 t1 = Thread(target=func,args=('t1',)) #创建一个线程,并给线程安排任务,大致理解成新雇佣了一个员工来干fun的工作 28 t1.start() #告诉这个员工可以开始干活了 29 t2 = Thread(target=func,args=('t2',)) 30 t2.start() 31 for i in range(9999): 32 print('main',i) 33 ''' 34 35 #方法二 36 ''' 37 class test(Thread): #类 38 def run(self): #t.start执行时就是执行run 39 for n in range(10): 40 print('in the fun',n) 41 if __name__ == '__main__': 42 t = test() #创建一个对象 43 # t.run() #方法的调用,为单线程 44 t.start() #开启多线程 45 for i in range(10): 46 print('in the main',i) 47 ''' 48 49 50 51 52 #多进程 53 #方法1 54 from multiprocessing import Process 55 ''' 56 def fun(): 57 for i in range(10000): 58 print('in the fun',i) 59 if __name__ == '__main__': 60 t = Process(target=fun) 61 t.start() 62 for i in range(10000): 63 print('in the main',i) 64 ''' 65 #方法二 66 ''' 67 class test(Process): 68 def run(self): 69 for i in range(100000): 70 print('in the func',i) 71 if __name__ == '__main__': 72 t = test() 73 t.start() 74 for i in range(100000): 75 print('in the main',i) 76 ''' 77 78 79 #线程池:创建一个线程池,里面有多个线程,用户给线程池提交任务,任务有线程中的某一个线程执行 80 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor 81 ''' 82 import time 83 def func(name): 84 for i in range(10): 85 print(name,i) 86 time.sleep(1) 87 88 if __name__ == '__main__': 89 with ThreadPoolExecutor(3) as t: #创建线程池 90 for a in range(10): 91 t.submit(func,name=f'线程{a}') 92 #其实上面一段代码就是说:我启动最大worker数为3的线程池,创建了10个任务,然后交给线程池处理,此时表示,这10个任务最大有三个会同时运行 93 print('===done===') #等待线程池中的任务执行完成后,才会执行这一句,(守护!!!) 94 ''' 95 96 #爬取北京新发地 97 url = 'http://www.xinfadi.com.cn/getPriceData.html' 98 headers = { 99 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', 100 'Referer': 'http://www.xinfadi.com.cn/priceDetail.html' 101 } 102 # data = { 103 # 'limit': '20', 104 # 'current': 2 105 # } 106 import requests,csv 107 import re 108 from concurrent.futures import ThreadPoolExecutor 109 110 f = open('1207.txt','w+',encoding='utf-8') 111 def down_url(data): 112 resp = requests.post(url=url,headers=headers,data=data) 113 f.writelines(resp.text) 114 print('page',data['current'],'download完成') 115 116 if __name__ == '__main__': 117 with ThreadPoolExecutor(50) as t : 118 for i in range(2,1000): 119 data={ 120 'limit': '20', 121 'current': i 122 } 123 t.submit(down_url,data) 124 f.close() 125 print('全部完成')