多線程
的限制以及多進程
中傳遞參數的方式?python多線程有個全局解釋器鎖(global interpreter lock),簡稱GIL,這個GIL並非python的特性,他是隻在Cpython解釋器裏引入的一個概念,而在其餘的語言編寫的解釋器裏就沒有這個GIL例如:Jython。html
這個鎖的意思是任一時間只能有一個線程運用解釋器,跟單cpu跑多個程序一個意思,咱們都是輪着用的,這叫「併發」,不是「並行」。python
爲何會有GIL?c++
多核CPU的出現,充分利用多核,採用多線程編程慢慢普及,難點就是線程之間數據的一致性和狀態同步程序員
說到GIL解釋器鎖,咱們容易想到在多線程中共享全局變量的時候會有線程對全局變量進行的資源競爭,會對全局變量的修改產生不是咱們想要的結果,而那個時候咱們用到的是python中線程模塊裏面的互斥鎖,哪樣的話每次對全局變量進行操做的時候,只有一個線程可以拿到這個全局變量;看下面的代碼:面試
import threading global_num = 0 def test1(): global global_num for i in range(1000000): global_num += 1 print("test1", global_num) def test2(): global global_num for i in range(1000000): global_num += 1 print("test2", global_num) t1 = threading.Thread(target=test1) t2 = threading.Thread(target=test2) t1.start() t2.start()
接下來加入互斥鎖sql
import threading import time global_num = 0 lock = threading.Lock() def test1(): global global_num lock.acquire() for i in range(1000000): global_num += 1 lock.release() print("test1", global_num) def test2(): global global_num lock.acquire() for i in range(1000000): global_num += 1 lock.release() print("test2", global_num) t1 = threading.Thread(target=test1) t2 = threading.Thread(target=test2) start_time = time.time() t1.start() t2.start()
哪些狀況適合用多線程呢:數據庫
只要在進行耗時的IO操做的時候,能釋放GIL,因此只要在IO密集型的代碼裏,用多線程就很合適django
哪些狀況適合用多進程呢:編程
用於計算密集型,好比計算某一個文件夾的大小安全
多進程間同享數據
多進程間同享數據,可以運用multiprocession.Value和multiprocessing.Array
bool and a or b
至關於bool? a: b
>>> a = "first" >>> b = "second" >>> 1 and a or b # 輸出內容爲 'first' >>> 0 and a or b # 輸出內容爲 'second'
上述內容你應該能夠理解,可是還存在一個問題,請看下面的代碼
>>> a = "" >>> b = "second" >>> 1 and a or b # 輸出內容爲 'second'
由於 a 是一個空串,空串在一個布爾環境中被Python當作假值,這個表達式將「失敗」,且返回 b 的值。
若是你不將它想象成象 bool ? a : b 同樣的語法,而把它當作純粹的布爾邏輯,這樣的話就會獲得正確的理解。
1 是真,a 是假,因此 1 and a 是假。假 or b 是b。
應該將 and-or 技巧封裝成一個函數:
def choose(bool, a, b): return (bool and [a] or [b])[0]
由於 [a] 是一個非空列表,它永遠不會爲假。甚至 a 是 0 或 」 或其它假值,列表[a]爲真,由於它有一個元素。
PEP8 規範 官方文檔:https://www.python.org/dev/peps/pep-0008/
PEP8中文翻譯:http://www.cnblogs.com/ajianbeyourself/p/4377933.html
這個在於平時的積累的了
還有不少,本身去整理一下吧
ORM,全拼Object-Relation Mapping,意爲對象-關係映射
實現了數據模型與數據庫的解耦,經過簡單的配置就能夠輕鬆更換數據庫,而不須要修改代碼只須要面向對象編程
ORM操做本質上會根據對接的數據庫引擎,翻譯成對應的sql語句,
全部使用Django開發的項目無需關心程序底層使用的是MySql、Oracle、SQLite....,若是數據庫遷移,只須要更換Django的數據庫引擎便可。
她專科學歷
27歲從零開始學習c,c++,python編程語言
29歲編寫百例教程
30歲掌握10種編程語言,
用自學的經歷告訴你,學編程就找夢想橡皮擦
歡迎關注她的公衆號,搜索— 非本科程序員
序號 | 文章 |
---|---|
Python面試題No1 | Python基礎面試,看這篇文章畫重點吧 |
Python面試題No2 | Python面試快問快答,理論要的就是速度與精準 |
Python面試題No3 | 學習Python一年,基礎忘記了,看看面試題回憶回議 |
Python面試題No4 | 去面試Python工程師,這幾個基礎問題必定要能回答 |
Python面試題No5 | 2019年,Python工程師必考的6個面試題 |
Python面試題No6 | 昨天去面試,這5個Python面試題都被考到了 |
Python面試題No7 | 週三面試Python開發,這幾道Python面試題差點答錯,Python面試題No7 |
Python面試題No8 | 面試Python工程師,這幾道編碼題有必要背背 |
Python面試題No9 | 又面試了Python爬蟲工程師,碰到這麼幾道面試題 |
Python面試題No10 | 朋友去面試Python工程師,又帶回來幾道基礎題 |
Python面試題No11 | 剛畢業去面試Python工程師,這幾道題太難了 |
Python面試題No12 | 五一4天就背這些Python面試題了 |
Python面試題No13 | 大意了,這幾道Python面試題沒有答對 |
Python面試題No14 | 明天找python工做,看看這幾道Python面試題吧 |
Python面試題No15 | 這幾道Python面試題,穩準狠 |