Python 多執行緒不加鎖分塊讀取檔案

2021-08-15 14:08:09 字數 1667 閱讀 9387

多執行緒讀取或寫入,一般會涉及到同步的問題,否則產生的結果是無法預期的。那麼在讀取乙個檔案的時候,我們可以通過加鎖,但讀不像寫操作,會導致檔案錯誤,另外鎖操作是有一定的耗時。因此通過檔案分塊,可以比較有效的解決多執行緒讀問題,之前看到有人寫的分塊操作,比較複雜,需要實現建立好執行緒以及所讀取塊資訊,在這裡,我提供了一種比較簡便的方法,以供參考。

#!/user/bin/env python

#_*_coding:utf-8_*_

fromthreadingimportthread

importtime

fromprocessingimportprocess, queue

frommultiprocessingimportprocess

file_path ='t'fd = open(file_path,'r')

defdeal(thread_num):

i = 1

line_list =

#20是我的檔案行數,正式情況下可以通過wc -l t獲取

whilei <= 20/thread_num:

i += 1

returnline_list

deftodo(thread_name, line_list):

# print 'thread_name:',thread_name,'start'

forlineinline_list:

printstr(thread_name) +' counsume:'+ line

# print 'thread_name:', thread_name, 'end'

if__name__ =='__main__':

thread_num = 10

thread_list =

foriinrange(thread_num):

line_list = deal(thread_num)

t = thread(target=todo, args=[i, line_list])

t.start()

fortinthread_list:

t.join()

下面是檔案格式:

123

4567

891011

1213

1415

1617

1819

20

執行的結果如下:

多執行緒如何實現不加鎖實現高併發

最主要的想法是運用多執行緒實現高併發的處理資料,用來提公升對資料的處理速度,起初運用的是執行緒池和普通資料庫連線但是併發操作會造成死鎖的問題出現,原因是兩個執行緒同時搶到了同乙個資源造成的,解決方式是給要執行的物件上乙個鎖,但是這樣就相當於哪個執行緒先搶到了就會將業務鎖上其他都在等待,實際上就還是相...

Python多執行緒程式設計之多執行緒加鎖

python語言本身是支援多執行緒的,不像php語言。下面的例子是多個執行緒做同一批任務,任務總是有task num個,每次執行緒做乙個任務 print 做完後繼續取任務,直到所有任務完成為止。1 coding utf 8 2import threading 34 start task 0 5 ta...

python 多執行緒 thread 加鎖(二)

thread.start new thread function,args kwargs 函式原型,其中function引數是你將要呼叫的執行緒函式名稱沒有括號 args是講傳遞給你的執行緒函式的引數,他必須是個tuple型別 而kwargs是可選的引數,如果沒有引數,也一定是 import thr...