python 多執行緒

2021-08-14 18:34:10 字數 4047 閱讀 2272

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分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...