Python 之 threading學習教程

2021-07-16 09:45:58 字數 3620 閱讀 3119

這篇

threading

教程

是我自己工作和學習的總結。

建立多執行緒常用的三種方法: 建立

thread

的例項,傳給它乙個函式

建立thread的例項,傳給它乙個可呼叫的類例項(不推薦)

派生thread的子類,並建立子類的例項(推薦)

建立thread的例項,傳給它乙個函式

#!/usr/bin/env python

# coding:utf-8

import threading

from time import ctime, sleep

loops = [4, 2]

def loop(n, sec):

print 'start loop', n, ' at: ', ctime()

sleep(sec)

print 'loop', n, ' done at: ', ctime()

def main():

print 'starting at: ', ctime()

threads =

nloops = range(len(loops))

for i in nloops:

t = threading.thread(target=loop, args=(i, loops[i]))

for i in nloops:    # start threads

threads[i].start()

for i in nloops:    # wait for all threads to finish

threads[i].join()

print 'all done at: ', ctime()

if __name__ == '__main__':

main()

執行結果:

liuqian@ubuntu:~$ python test_threading1.py 

starting at:  wed jul 20 13:20:06 2016

start loop 0  at:  wed jul 20 13:20:06 2016

start loop 1  at:  wed jul 20 13:20:06 2016

loop 1  done at:  wed jul 20 13:20:08 2016

loop 0  done at:  wed jul 20 13:20:10 2016

all done at:  wed jul 20 13:20:10 2016

【說明】

join([timeout])方法將等待執行緒結束,或者在提供了超時時間的情況下達到超時時間。對於join()方法而言,其實它根本不需要呼叫。一旦執行緒啟動,它就會一直執行,直到給定的函式完成後退出。如果主線程還有其他事情要去做,而不是等待這些執行緒完成(例如其他處理或者等待新的客戶端請求),就可以不呼叫join()。join()只在你需要等待執行緒完成的時候才是有用的。

建立thread的例項,傳給它乙個可呼叫的類例項

#!/usr/bin/env python

# coding:utf-8

import threading

from time import ctime, sleep

loops = [4,2]

class threadfunc(object):

def __init__(self, func, args, name=''):

self.name = name

self.func = func

self.args = args

def __call__(self):

self.func(*self.args)

def loop(n, sec):

print 'start loop', n, ' at: ', ctime()

sleep(sec)

print 'loop', n, ' done at: ', ctime()

def main():

print 'starting at: ', ctime()

threads =

nloops = range(len(loops))

for i in nloops:

t = threading.thread(target=threadfunc(loop, (i, loops[i]), loop.__name__))

for i in nloops:    # start threads

threads[i].start()

for i in nloops:    # wait for all threads to finish

threads[i].join()

print 'all done at: ', ctime()

if __name__ == '__main__':

main() 

輸出與第乙個案例一樣。

【說明】當建立新執行緒時,thread類的**將呼叫threadfunc物件,此時會呼叫__cal__()這個特殊方法。

派生thread的子類,並建立子類的例項(推薦)

#!/usr/bin/env python

# coding:utf-8

import threading

from time import ctime, sleep

loops = [4,2]

class mythread(threading.thread):

def __init__(self, func, args, name=''):

threading.thread.__init__(self)

self.name = name

self.func = func

self.args = args

def run(self):    # 必須要寫

self.func(*self.args)

def loop(n, sec):

print 'start loop', n, ' at: ', ctime()

sleep(sec)

print 'loop', n, ' done at: ', ctime()

def main():

print 'starting at: ', ctime()

threads =

nloops = range(len(loops))

for i in nloops:

t = mythread(loop, (i, loops[i]), loop.__name__)

for i in nloops:    # start threads

threads[i].start()

for i in nloops:    # wait for all threads to finish

threads[i].join()

print 'all done at: ', ctime()

if __name__ == '__main__':

main()

劉[小]倩

python中的執行緒使用 threading模組

最近又用到了python中的多執行緒程式設計,前段時間使用並學習過,但是由於長時間不用,慢慢就忘記怎麼用了,畢竟對執行緒的使用還不是很熟練,現在總結一下,記錄下來,加深一下學習的印象。python中關於執行緒,主要有兩個模組thread和threading,其中thread的模組已不建議使用,因為t...

11 2 Python多執行緒threading

分程序設定 工具 threading包 1 先寫需要分程序執行的函式或者類 defmaigic pass 2 例項化threading,得到新的程序 threadone threading.thread target maigic 此時還可以接受arg引數import threading impor...

Python3併發程式設計之threading模組

建立執行緒物件 threading.thread 引數 引數 描述group none 該類中的待擴充套件引數。target none 目標函式,即被開闢執行緒的執行任務。預設值為none,表示什麼都不執行。name none 該執行緒的名稱。在預設情況下,執行緒的唯一名稱以 thread n 的形...