python 多執行緒 入門
python裡的多執行緒,一直用得不是很多。為了最快速的上手,搞明白多執行緒到底是個什麼鬼,寫了個簡單的例子
#!/usr/bin/env python
#coding:utf-8
'''
Created on 2016年6月3日
@author: lei.wang
'''
import threading
from time import ctime,sleep
def music(entertainment):
for i in range(2):
print "Listening to %s. %s" %(entertainment,ctime())
sleep(1)
def movie(entertainment):
for i in range(2):
print "Watching the %s. %s" %(entertainment,ctime())
sleep(5)
if __name__ == '__main__':
threads = []
thread_music = threading.Thread(target=music,args=(u"暗號",))
threads.append(thread_music)
thread_movie = threading.Thread(target=movie,args=(u"肖聖克救贖",))
threads.append(thread_movie)
for each in threads:
each.setDaemon(True)
each.start()
each.join()
print "all threads end at %s" %(ctime())
程式碼執行結果
Listening to 暗號. Fri Jun 3 12:38:12 2016
Watching the 肖聖克救贖. Fri Jun 3 12:38:12 2016
Listening to 暗號. Fri Jun 3 12:38:13 2016
Watching the 肖聖克救贖. Fri Jun 3 12:38:17 2016
all threads end at Fri Jun 3 12:38:22 2016
對程式碼做個簡單的分析:
首先建立一個空的threads列表,用來存放執行緒。然後分別建立執行緒thread_music與thread_moive。
將Thread中原始碼建構函式的說明部分摳出來:
class Thread(_Verbose):
"""A class that represents a thread of control.
This class can be safely subclassed in a limited fashion.
"""
__initialized = False
# Need to store a reference to sys.exc_info for printing
# out exceptions when a thread tries to use a global var. during interp.
# shutdown and thus raises an exception about trying to perform some
# operation on/with a NoneType
__exc_info = _sys.exc_info
# Keep sys.exc_clear too to clear the exception just before
# allowing .join() to return.
__exc_clear = _sys.exc_clear
def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, verbose=None):
"""This constructor should always be called with keyword arguments. Arguments are:
*group* should be None; reserved for future extension when a ThreadGroup
class is implemented.
*target* is the callable object to be invoked by the run()
method. Defaults to None, meaning nothing is called.
*name* is the thread name. By default, a unique name is constructed of
the form "Thread-N" where N is a small decimal number.
*args* is the argument tuple for the target invocation. Defaults to ().
*kwargs* is a dictionary of keyword arguments for the target
invocation. Defaults to {}.
If a subclass overrides the constructor, it must make sure to invoke
the base class constructor (Thread.__init__()) before doing anything
else to the thread.
"""
通過原始碼,很容易看出來
thread_music = threading.Thread(target=music,args=(u"暗號",))
是如何構造一個執行緒的。
jion()方法放在for迴圈外邊,就是說必須要等for迴圈裡的兩個程式都結束以後,才能繼續執行主程式。
從程式碼最後的結果來分析,thread_music與thread_movie是同時開始執行的,music程式sleep1s後執行第二次,而movie程式sleep5s後執行第二次。主程式在兩個執行緒都執行完了以後才執行。
相關文章
- 入門python多執行緒/多程式Python執行緒
- Java多執行緒(一)多執行緒入門篇Java執行緒
- python爬蟲入門八:多程式/多執行緒Python爬蟲執行緒
- Java多執行緒入門Java執行緒
- 多執行緒與高併發(一)多執行緒入門執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- 多執行緒基礎入門執行緒
- Android入門教程 | 多執行緒Android執行緒
- day20_多執行緒入門丶執行緒安全執行緒
- Java入門教程十三(多執行緒)Java執行緒
- go語言多執行緒入門筆記-執行緒同步Go執行緒筆記
- Java入門系列-21-多執行緒Java執行緒
- Java多執行緒傻瓜入門介紹Java執行緒
- Java 高階 --- 多執行緒快速入門Java執行緒
- java多執行緒的入門小記Java執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- Python爬蟲入門【9】:圖蟲網多執行緒爬取Python爬蟲執行緒
- Python爬蟲入門【10】:電子書多執行緒爬取Python爬蟲執行緒
- Python 多執行緒多程式Python執行緒
- 【Python入門基礎】程式和執行緒Python執行緒
- Java多執行緒 -- wait() 和 notify() 使用入門Java執行緒AI
- c++11 多執行緒入門教程(一)C++執行緒
- QT從入門到入土(四)——多執行緒QT執行緒
- Python多執行緒程式設計深度探索:從入門到實戰Python執行緒程式設計
- python多執行緒中:如何關閉執行緒?Python執行緒
- Python 多執行緒及程式Python執行緒
- python3 多執行緒Python執行緒
- 04.python-多執行緒Python執行緒
- python--多工執行緒Python執行緒
- python多執行緒基礎Python執行緒
- python有多執行緒嗎Python執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- Python中的多工:多執行緒Python執行緒
- Python的多程式和多執行緒Python執行緒
- 多執行緒和多執行緒同步執行緒
- QT從入門到入土(四)——多執行緒(QtConcurrent::run())QT執行緒
- 什麼是多執行緒?Python多執行緒有什麼優勢?執行緒Python
- Python執行緒專題10:queue、多執行緒按順序執行Python執行緒
- 多執行緒--執行緒管理執行緒