我对 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
我有一个可行的解决方案,其中每个文件在主线程上串行打开,然后在单独的线程上处理,但理想情况下,队列中的每个文件路径都应该由其自己的线程打开、读取和处理。