1. 程式人生 > 其它 >Thread Process 執行緒 程序

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