對於python線程相關的函數本文再也不作詳細講解,若是想學習線程threading內容請參考:python 線程建立和參數傳遞 python
1git 2github 3微信 4數據結構 5多線程 6併發 7ide 8函數 9學習 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(我的博客地址): shuopython.com @WeChat Official Account(微信公衆號):猿說python @Github:www.github.com
@File:python_threading.py @Time:2019/12/21 21:25
@Motto:不積跬步無以致千里,不積小流無以成江海,程序人生的精彩須要堅持不懈地積累! """
import threading
def study_info(*args,**kwargs): print(args,kwargs)
def main():
# 信息列表 list_info = [{"name":"python 基礎","progress":"10%"}, {"name": "python 面向對象", "progress": "20%"}, {"name": "python 爬蟲", "progress": "30%"}, {"name": "python pyqt5", "progress": "40%"}, {"name": "python 數據結構", "progress": "50%"},]
# 建立線程 for i in range(5): p = threading.Thread(target=study_info,args=(i,),kwargs=list_info[i]) # 啓動線程 p.start()
if __name__ == "__main__": main() |
輸出結果:
1 2 3 4 5 |
(0,) {'name': 'python 基礎', 'progress': '10%'} (1,) {'name': 'python 面向對象', 'progress': '20%'} (2,) {'name': 'python 爬蟲', 'progress': '30%'} (3,) {'name': 'python pyqt5', 'progress': '40%'} (4,) {'name': 'python 數據結構', 'progress': '50%'} |
對於python進程相關的函數本文再也不作詳細講解,若是想學習進程Process內容請參考:python 進程Process
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from multiprocessing import Process
def study_info(*args,**kwargs): print(args,kwargs)
def main():
# 信息列表 list_info = [{"name":"python 基礎","progress":"10%"}, {"name": "python 面向對象", "progress": "20%"}, {"name": "python 爬蟲", "progress": "30%"}, {"name": "python pyqt5", "progress": "40%"}, {"name": "python 數據結構", "progress": "50%"},]
# 建立進程 for i in range(5): p = Process(target=study_info,args=(i,),kwargs=list_info[i]) # 啓動進程 p.start()
if __name__ == "__main__": main() |
輸出結果:
1 2 3 4 5 |
(0,) {'name': 'python 基礎', 'progress': '10%'} (1,) {'name': 'python 面向對象', 'progress': '20%'} (2,) {'name': 'python 爬蟲', 'progress': '30%'} (3,) {'name': 'python pyqt5', 'progress': '40%'} (4,) {'name': 'python 數據結構', 'progress': '50%'} |
1.一個線程只能屬於一個進程,而一個進程能夠有多個線程,但至少有一個線程(線程是計算機的最小單位);
2.資源分配給進程,同一進程的全部線程共享該進程的全部資源,進程與進程之間資源相互獨立,互不影響(相似深拷貝);
3.多進程模式最大的優勢就是穩定性高,由於一個子進程崩潰了,不會影響主進程和其餘子進程,多進程模式的缺點是在Windows下建立進程開銷巨大。另外,操做系統能同時運行的進程數也是有限的,在內存和CPU的限制下,若是有幾千個進程同時運行,操做系統連調度都會成問題(進程的建立比線程的建立更加佔用計算機資源);
4.多線程模式致命的缺點就是任何一個線程掛掉均可能直接形成整個進程崩潰,由於全部線程共享進程的內存;
5.因爲GIL鎖的緣故,python 中線程其實是併發運行(即使有多個cpu,線程會在其中一個cpu來回切換,只佔用一個cpu資源),而進程纔是真正的並行(同時執行多個任務,佔用多個cpu資源),下面關於並行和併發作一個簡單的瞭解;
並行是指兩個或者多個事件在同一時刻發生,python中的進程屬於並行,能充分利用計算機資源,效率最高,同時執行多個任務,佔用多個cpu資源;
併發是指兩個或多個事件在同一時間間隔發生,python中的線程屬於併發,無論計算機有多少個CPU,無論你開了多少個線程,同一時間多個任務會在其中一個CPU來回切換,只佔用一個CPU,效率並不高;
關於並行和併發咱們留到後面GIL鎖在詳細講解;