Python線程,進程,攜程,I/O同步,異步


只有本人能看懂的-Python線程,進程,攜程,I/O同步,異步

舉個栗子

  我想get三個url,先用普通的for循環

import requests from multiprocessing import Process from threading import Thread import requests import time # -----正常遍歷 串行 同步----- def get_page(url): page = requests.get(url) print(url) start = time.time() urls = ['http://jandan.net/','https://www.python.org','http://www.gamersky.com/'] for i in urls: get_page(i) end = time.time() print(end - start)
# 這是正常的

這回我用threading模塊給他弄快點。

def get_page(url): page = requests.get(url) start = time.time() list = [] # 線程對象列表 urls = ['http://jandan.net/','http://www.xiaohuar.com/','http://www.gamersky.com/'] for i in urls: ok = Thread(target=get_page,args=(i,)) # target為函數名,args為給函數傳的參數  list.append(ok) # get_page(i) for i in list: i.start() # 啟動一下線程 for i in list: i.join() # 主線程等待子線程執行之后結束 end = time.time() print(end - start)
# 開了仨線程運行
# 如果線程使用了join()函數(主線程代碼將停在join) ,主進程將等待子線程執行結束再執行
# 如果子線程(
ok.setDeamon(True))變成守護線程,那么主線程將不會等待子線程執行結束,當主線程結束時,不管子線程是否執行完畢都將強制終止!

 我再瞅瞅進程

import multiprocessing import time def run(): i = 0 while i <10000: time.sleep(2) print(i) i+=1 if __name__ == "__main__": p = multiprocessing.Process(target=run) # 一個進程 p.start() print(p.pid) # 查看進程的pid

再來個多進程

import multiprocessing import time def run(): i = 0 while i <10000: time.sleep(2) print(i) i+=1 if __name__ == "__main__": p = multiprocessing.Process(target=run) # 一個進程 p1 = multiprocessing.Process(target=run) # 一個進程 p2 = multiprocessing.Process(target=run) # 一個進程  p.start() p1.start() p2.start() print(p.pid) # 查看進程的pid

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM