Python0016多執行緒

2021-08-15 19:52:31 字數 2800 閱讀 7340

python0016多執行緒

1.多執行緒簡介

現代的高階程式語言中,幾乎所有語言都支援多執行緒。多執行緒很實用,即便是在單核處理器上多執行緒仍然是實用的。

使用多執行緒過程中問題也很多,多個執行緒間是共享資料的,這時候會出現執行緒安全問題。假設a,b執行緒共同使用變數sum。a中執行的是sum=0 sum=1+2  print sum,b中執行sum=1 sum=3+4 print sum。由於a,b兩個執行緒共同執行,那麼這六條語句有多種執行順序,下面列舉兩種:

(1)正常

a: sum=0

a: sum=1+2

a: print sum  #輸出3

b: sum=1

b: sum=3+4

b: print sum #輸出7

(2)異常

b: sum=1

b: sum=3+4

a: sum=0

a: sum=1+2

b: print sum #輸出3

a: print sum #輸出3

出現這種問題後,就要用到執行緒鎖,執行緒同步機制等。當同時使用多個執行緒鎖時還可能出現死鎖。

2.python中的多執行緒

在python中有兩種建立執行緒的方式:

(1)寫乙個要再子執行緒中執行的函式,傳給thread類

import threading

import time

#把函式傳給thread

def print_number(number):

#下面一行是為了讓結果看起來更自然,讓執行緒休眠100ms,可以去掉

time.sleep(0.1)

print("thread_id:",threading.current_thread().ident," num:",number)

threads=

#下面建立了10個執行緒

for i in range(10):

#target 要執行的函式 args 要執行函式的引數 注意:(i,)最後乙個引數一定要這樣寫,否則會有問題,具體原因還沒有**

t=threading.thread(target=print_number,args=(i,))

#啟動執行緒

for t in threads:

t.start()

# 某次執行結果:

# thread_id: 123145321340928 num: 0

# thread_id: 123145331851264 num: 2

# thread_id: 123145326596096 num: 1

# thread_id: 123145337106432 num: 3

# thread_id: 123145342361600 num: 4

# thread_id: 123145368637440 num: 9

# thread_id: 123145358127104 num: 7

# thread_id: 123145347616768 num: 5

# thread_id: 123145363382272 num: 8

# thread_id: 123145352871936 num: 6

(2)繼承thread類,重寫run方法

import threading

import time

#繼承thread物件,重寫run方法

class printnumthread(threading.thread):

def __init__(self,number):

super(printnumthread,self).__init__()

self.number=number

def run(self):

#下面一行是為了讓結果看起來更自然,讓執行緒休眠100ms,可以去掉

time.sleep(0.1)

print("thread_id:",threading.current_thread().ident," num:",self.number)

threads=

#下面建立了10個執行緒

for i in range(10):

#啟動這10個執行緒

for t in threads:

t.start()

# 某次執行結果:

# thread_id: 123145426317312 num: 0

# thread_id: 123145431572480 num: 1

# thread_id: 123145436827648 num: 2

# thread_id: 123145447337984 num: 4

# thread_id: 123145452593152 num: 5

# thread_id: 123145463103488 num: 7

# thread_id: 123145442082816 num: 3

# thread_id: 123145457848320 num: 6

# thread_id: 123145468358656 num: 8

# thread_id: 123145473613824 num: 9

python多執行緒 python多執行緒

通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...

python多執行緒詳解 Python多執行緒詳解

前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...

python程式多執行緒 PYTHON多執行緒

在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...