threading模組是對thread模組的第二次封裝,提供了更好的api來讓我們使用。
使用threading實現多執行緒程式設計都是使用的thread類,或者timer類,timer是thread的子類,可以指定時間間隔後在執行某個操作
使用thread類有兩種方式:
1、直接建立thread類的例項
2、自定義類來繼承thread類
# coding:utf8
import threading
from time import ctime, sleep
defmusic
(func):
for i in range(2):
print
"i was listening to %s. %s" % (func, ctime())
sleep(1)
defmove
(func):
for i in range(2):
print
"i was at the %s! %s" % (func, ctime())
sleep(5)
threads =
t1 = threading.thread(target=music, args=(u'十年',))
t2 = threading.thread(target=move, args=(u'火影忍者',))
if __name__ == '__main__':
for t in threads:
t.setdaemon(true)
t.start()
for t in threads:
t.join()
print
"all over %s" % ctime()
'''i was listening to 十年. thu jan 18 16:11:37 2018
i was at the 火影忍者! thu jan 18 16:11:37 2018
i was listening to 十年. thu jan 18 16:11:38 2018
i was at the 火影忍者! thu jan 18 16:11:42 2018
all over thu jan 18 16:11:47 2018
'''
可以看出聽歌和看電影是同事進行的。
# coding:utf-8
from threading import thread
from time import sleep, ctime
defmusic
(func):
for i in range(2):
print
"i was listening to %s. %s" % (func, ctime())
sleep(2)
defmove
(func):
for i in range(2):
print
"i was at the %s! %s" % (func, ctime())
sleep(5)
class
mythread
(thread):
# 使用類的初始化方法對func、args等引數進行初始化。
def__init__
(self, func, *args):
super(mythread, self).__init__()
self.func = func
self.args = args
# 間接地呼叫函式。args是乙個包含將要提供給函式的按位置傳遞的引數的元組。
# 如果省略了args,任何引數都不會被傳遞,kwargs是乙個包含關鍵字引數的字典。
defrun
(self):
th =
t1 = mythread(music, '十年')
t2 = mythread(move, '火影忍者')
if __name__ == "__main__":
for t in th:
t.setdaemon(true)
t.start()
for t in th:
t.join()
print
'endtime : %s' % ctime()
'''i was listening to 十年. thu jan 18 16:17:44 2018
i was at the 火影忍者! thu jan 18 16:17:44 2018
i was listening to 十年. thu jan 18 16:17:46 2018
i was at the 火影忍者! thu jan 18 16:17:49 2018
endtime : thu jan 18 16:17:54 2018
'''
#不帶引數的方法
>>>
defsay
():print
'say in'
say in
#函式只帶元組的引數
>>>
defsay
(a,b):
print a,b
hello 佳佳
#函式帶關鍵字引數
>>>
defsay
(a=1,b=2):
print a,b
>>>
defhaha
(**kw):
>>> haha(a='a',b='b')
a b
# coding:utf8
from threading import thread
import time
class
mythread
(thread):
th =
def__init__
(self, thread_name, parameter, sleeptime):
super(mythread, self).__init__()
self.name = thread_name
self.parameter = parameter
self.isrunning = true
self.sleeptime = sleeptime
defrun(self):
# 重寫run函式,say為想要呼叫的函式
# 此時say的引數可以從self.parameter中拿出來使用
say(self.name, self.parameter, self.sleeptime)
defsay
(word, par, sleeptime):
for i in range(3):
print
"%s : %s" % (word, par), time.ctime()
time.sleep(sleeptime)
th =
t1 = mythread('thread_1', u'佳佳', 2)
t2 = mythread('thread_2', u'忍者', 5)
for t in th:
t.start()
for t in th:
t.join()
print
'end : %s ' % time.ctime()
'''thread_1 : 佳佳 thu jan 18 16:45:04 2018
thread_2 : 忍者 thu jan 18 16:45:04 2018
thread_1 : 佳佳 thu jan 18 16:45:06 2018
thread_1 : 佳佳 thu jan 18 16:45:08 2018
thread_2 : 忍者 thu jan 18 16:45:09 2018
thread_2 : 忍者 thu jan 18 16:45:14 2018
end : thu jan 18 16:45:19 2018
'''
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
python多執行緒詳解 Python多執行緒詳解
前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...
python程式多執行緒 PYTHON多執行緒
在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...