微信公衆號:stackflow
若有問題或建議,請公衆號留言
Question:https://stackoverflow.com/questions/419163/
最近更新:2018-12-29html
如題:
代碼以下:python
1# Threading example
2import time
3import thread
4
5def myfunction(string, sleeptime, lock, *args):
6 while True:
7 lock.acquire()
8 time.sleep(sleeptime)
9 lock.release()
10 time.sleep(sleeptime)
11
12if __name__ == "__main__":
13 lock = thread.allocate_lock()
14 thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
15 thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
複製代碼
當python解釋器運行源代碼時, 它將執行全部能找到的代碼。
在代碼執行前,解釋器會定義幾個特定的變量。例如,若是解釋器將該模塊 (源文件) 做爲主程序運行, 會設置__name__ == '__main__'
。若是此文件是從另外一個模塊導入的, 則__name__
將設置爲模塊的名稱。
示例中的代碼,假設是做爲主函數來運行,即微信
1python threading_example.py
複製代碼
設置特殊變量後, 它將執行導入語句並加載這些模塊。而後, 它將計算def
塊, 建立一個函數對象, 並建立一個名爲 myfunction
的變量, 指向該函數對象。而後, 它將讀取 if
語句, 並看到 __name__
確實等於 "__main__"
, 所以它將執行顯示在其中的代碼塊。
這樣作的一個緣由是, 有時編寫一個模塊 (a.py
), 能夠直接執行。或者, 也能夠在另外一個模塊中導入和使用它。經過執行主程序檢查, 你但願只將模塊做爲程序運行時執行該代碼, 而不是在有人只想要導入你的模塊並調用函數時執行該代碼。
More 有更多解釋app
注: 若是將代碼放在函數定義以前, 它將在 __name__
以前執行。函數
1print("This code executes before main.")
2
3def functionA():
4 print("Function A")
5
6def functionB():
7 print("Function B")
8
9if __name__ == '__main__':
10 functionA()
11 functionB()
複製代碼
做爲主函數執行的輸出以下:ui
1This code executes before main.
2Function A
3Function B
複製代碼
若是導入此模塊而不是用做主函數, 則在導入時將輸出如下內容:spa
1This code executes before main.
複製代碼