Thread Process 线程 进程

  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('全部完成')

 

上一篇:Http Cookie 探索


下一篇:Process finished with exit code -1073740791 (0xC0000409) PyCharm