私はマルチスレッドの経験がなく、Python にはかなり慣れていませんが、スレッドの適用から恩恵を受けるコードがいくつかあります。基本的な例を見つけて、各スレッドがファイルを開いてその内容を処理するように修正しました。唯一の問題は、do_work()
ファイルを開こうとすると実行が停止することです
import threading
from queue import Queue
q = Queue()
lock = threading.Lock()
#assuming these files exist
files = ['file1.txt', 'file2.txt', 'file3.txt', 'file4.txt']
def do_work(item):
with lock:
print(item) #will print file path
with open(item) as fh:
#but execution never reaches here
src = fh.read()
#do stuff with source
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
for i in range(4):
t = threading.Thread(target=worker)
t.daemon = True
t.start()
for f in files:
q.put(f) #fill q with file paths to be opened in parallel
q.join() #block until all tasks are complete
各ファイルがメインスレッドでシリアルに開かれ、個別のスレッドで処理される実用的なソリューションがありますが、理想的には、キュー内の各ファイルパスは独自のスレッドで開かれ、読み取られ、処理される必要があります。