Python-从多个线程追加到同一文件
发布于 2021-01-29 18:29:55
我正在编写一个将多个线程的行附加到同一文件的应用程序。
我有一个问题,其中某些行被追加而没有新行。
有什么解决办法吗?
class PathThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue
def printfiles(self, p):
for path, dirs, files in os.walk(p):
for f in files:
print(f, file=output)
def run(self):
while True:
path = self.queue.get()
self.printfiles(path)
self.queue.task_done()
pathqueue = Queue.Queue()
paths = getThisFromSomeWhere()
output = codecs.open('file', 'a')
# spawn threads
for i in range(0, 5):
t = PathThread(pathqueue)
t.setDaemon(True)
t.start()
# add paths to queue
for path in paths:
pathqueue.put(path)
# wait for queue to get empty
pathqueue.join()
关注者
0
被浏览
163
1 个回答
-
解决方案是仅在一个线程中写入文件。
import Queue # or queue in Python 3 import threading class PrintThread(threading.Thread): def __init__(self, queue): threading.Thread.__init__(self) self.queue = queue def printfiles(self, p): for path, dirs, files in os.walk(p): for f in files: print(f, file=output) def run(self): while True: result = self.queue.get() self.printfiles(result) self.queue.task_done() class ProcessThread(threading.Thread): def __init__(self, in_queue, out_queue): threading.Thread.__init__(self) self.in_queue = in_queue self.out_queue = out_queue def run(self): while True: path = self.in_queue.get() result = self.process(path) self.out_queue.put(result) self.in_queue.task_done() def process(self, path): # Do the processing job here pathqueue = Queue.Queue() resultqueue = Queue.Queue() paths = getThisFromSomeWhere() output = codecs.open('file', 'a') # spawn threads to process for i in range(0, 5): t = ProcessThread(pathqueue, resultqueue) t.setDaemon(True) t.start() # spawn threads to print t = PrintThread(resultqueue) t.setDaemon(True) t.start() # add paths to queue for path in paths: pathqueue.put(path) # wait for queue to get empty pathqueue.join() resultqueue.join()