1
A
回答
2
不降低性能的最好方法是在所有線程之間使用一個隊列,每個線程都會佔用一個項目,而一個主線程只會將一個項目取出並寫入一個文件,該隊列是線程安全的並阻止當它爲空時,或者如果可能時更好,只需返回5個線程中的所有值,然後將其寫入文件,則IO往往是我們可以做的更昂貴的操作之一,所以最好限制它我們可以。
另請注意,如果您要利用多個處理引擎,python中的線程不會利用多核心,原因GIL,而是使用multiprocessing。
這裏是一個簡單的例子:
from multiprocessing import Process, Queue
def test_1(q):
for i in range(10):
q.put('test_1: ' + str(i))
def test_2(q):
for i in range(10):
q.put('test_2: ' + str(i))
q = Queue()
p1 = Process(target=test_1, args=(q,))
p2 = Process(target=test_2, args=(q,))
p1.start()
p2.start()
with open('test.txt', 'w') as file:
while p1.is_alive() or p2.is_alive() or not q.empty():
try:
value = q.get(timeout = 1)
file.write(value + '\n')
except Exception as qe:
print "Empty Queue or dead process"
p1.join()
p2.join()
和test.txt
內容:
test_1: 0
test_1: 1
test_1: 2
test_1: 3
test_1: 4
test_2: 0
test_1: 5
test_2: 1
test_1: 6
test_2: 2
test_1: 7
test_2: 3
test_1: 8
test_2: 4
test_1: 9
test_2: 5
test_2: 6
test_2: 7
test_2: 8
test_2: 9
1
一種方法是鎖定文件,以便一次只有一個線程可以訪問它;檢查threading.Lock。
相關問題
- 1. 多線程寫入文本文件
- 2. 在線程中寫入文本文件
- 3. 多個文件寫入線程
- 4. 線程安全多文件寫入
- 5. Java/Scala多線程文件寫入
- 6. 多線程文件寫入行爲
- 7. 多線程寫入字節[]到文件
- 8. 在java中使用多線程在文件中寫入值
- 9. 在多線程應用程序中寫入文件失敗vb.net
- 10. C++:在多線程程序中寫入文件
- 11. Java線程寫入文件
- 12. 多線程,讀取多個文件並寫入新文件
- 13. 如何在多個線程中寫入文件
- 14. NSData如何在多線程中寫入文件?
- 15. 多線程寫入WCF請求中的文本文件?
- 16. 多線程在TinyXMl中寫入數據
- 17. 併發寫入多線程中的文件
- 18. 從ruby中的多個線程寫入單個文件
- 19. 多線程執行寫入?
- 20. 如何用多個線程寫入多個文件?
- 21. 如何使用多線程在python中一次更新/寫入多個文件?
- 22. 使用多線程寫入文本文件使用C#
- 23. 從多個線程寫入文本文件?
- 24. Java從多個線程併發寫入單個文本文件?
- 25. 多線程文件寫隊列
- 26. 通過多線程讀寫文件
- 27. 如何使用線程寫入文件?
- 28. 製作寫入文件線程安全
- 29. perl:多線程寫入和尾部文件
- 30. 使用多個線程寫入單個文件
謝謝!非常詳細的答案,我現在就試試這個 – nick
@nick很高興我可以幫忙,看看http://docs.python.org/library/multiprocessing.html#using-a-pool-of-workers它傾向於在map-reduce模式下使用python進行多處理的最低調的方式。 –