如何破坏从多个线程写入文件?

时间:2017-01-20 03:13:12

标签: multithreading file python-3.x python-multithreading

我正在编写一个将数据保存到文件的函数。可以从多个线程或进程同时使用相同的参数(相同的数据,相同的文件)调用它。这是一个我无法避免的场景,因此我正在编写单元测试以确保它不会导致数据损坏。

为了相信我的单元测试,我想测试一下写得不好的函数就会失败。我没有成功,我的文件总是包含预期的数据。

这是一种重现(缺乏)问题的方法。文件test.txt始终包含CONTENT

import io
import threading

# 1,000,000 lines: Test #0, Test #1, ..., Test #999999. About 13Mb.
CONTENT = ''.join(['Test #' + str(i) + "\n" for i in range(1000000)]).encode()

# Thread to write CONTENT to test.txt
class WriteThread(threading.Thread):
    def run(self):
        stream = io.BytesIO(CONTENT)
        with open('test.txt', 'wb') as f:
            for buffer in iter(lambda: stream.read(), b''):
                f.write(buffer)

# Run 100 write threads in parallel
threads = []
for i in range(100):
    threads.append(WriteThread())
for t in threads:
    t.start()
for t in threads:
    t.join()

我做错了吗?我很幸运吗?这是我应该依赖的行为吗?

0 个答案:

没有答案