Tôi có một chương trình python với nhiều luồng. Mỗi chủ đề phát hiện sự kiện, mà tôi muốn lưu trữ ở đâu đó để tôi có thể đọc lại chúng (để thử nghiệm). Ngay bây giờ, tôi đang sử dụng Pickle để xuất ra các sự kiện và mỗi luồng sẽ xuất ra một tệp khác. Lý tưởng nhất, tôi sẽ chỉ sử dụng một tập tin đầu ra, và tất cả các chủ đề sẽ viết cho nó, nhưng khi tôi cố gắng này, có vẻ như các chủ đề khác nhau cố gắng để viết đầu ra của họ cùng một lúc, và họ không nhận được ngâm đúng cách. Có cách nào để làm việc này không?Làm sạch từ nhiều chủ đề trong Python
Trả lời
có vẻ như một nơi tốt để sử dụng một số Queue
.
- Đề nghị tất cả chủ đề phát hiện sự kiện của bạn đặt các mục vào Hàng đợi được chia sẻ.
- Tạo một chuỗi khác để nhận các mục từ hàng đợi và viết/chọn/bất kỳ thứ gì từ chuỗi này.
từ các tài liệu Queue:
"Các module Queue thực hiện đa sản xuất, hàng đợi đa tiêu dùng Nó đặc biệt hữu ích trong việc lập trình ren khi thông tin phải trao đổi một cách an toàn giữa nhiều chủ đề.. Lớp Queue trong mô-đun thực hiện tất cả các ngữ nghĩa khóa bắt buộc. Nó phụ thuộc vào khả năng hỗ trợ luồng trong Python; xem mô-đun luồng . "
Có, với threading.Lock() đối tượng. Bạn tạo khóa trước khi tạo tất cả các chủ đề của mình, bạn đưa nó vào phương thức chịu trách nhiệm lưu/xóa các mục và phương pháp này sẽ lấy khóa trước khi ghi vào tệp và phát hành sau.
Bạn có thể tạo lock và nhận/giải phóng nó xung quanh mọi cuộc gọi đến pickle.dump()
.
Mô-đun logging có một số Rlock
được tích hợp trong Trình xử lý của nó. Vì vậy, bạn có thể logging
như bình thường (chỉ cần tạo trình xử lý để đăng nhập vào một tệp.)
Dưới đây là một ví dụ sử dụng threading.Lock():
import threading
import pickle
picke_lock = threading.Lock()
def do(s):
picke_lock.acquire()
try:
ps = pickle.dumps(s)
finally:
picke_lock.release()
return ps
t1 = threading.Thread(target=do, args =("foo",))
t2 = threading.Thread(target=do, args =("bar",))
p1 = t1.start()
p2 = t2.start()
inpt = raw_input('type anything and click enter... ')
- 1. Đọc một tập tin từ nhiều chủ đề trong python
- 2. Đồng bộ nhiều chủ đề trong python
- 3. python - nối vào cùng một tệp từ nhiều chủ đề
- 4. Ghi nhật ký bằng Python từ nhiều chủ đề
- 5. Vẽ từ nhiều chủ đề trong Qt
- 6. SQLAlchemy của Python không làm sạch bảng phụ (nhiều-nhiều)?
- 7. Gọi Console.WriteLine từ nhiều chủ đề
- 8. JNI - nhiều chủ đề
- 9. Ghi vào FileOutputStream từ nhiều chủ đề trong Java
- 10. Làm sạch Popen của Python
- 11. Chủ đề python
- 12. Chờ cho nhiều chủ đề (chủ đề Posix, C++)
- 13. Chủ đề trong Java và Python
- 14. Clojure rất nhiều chủ đề
- 15. Nhiều chủ đề hoặc quá trình với chủ đề
- 16. JNI gọi Java từ C++ với nhiều chủ đề
- 17. Truy cập vào IndexedDB từ nhiều chủ đề javascript
- 18. Nhiều chủ đề đọc từ cùng một tệp
- 19. Cập nhật giá trị tối đa từ nhiều chủ đề
- 20. Nhiều chủ đề miễn phí?
- 21. Nhiều chủ đề đọc từ cùng một tập tin
- 22. Làm sạch các máy chủ và API từ xa cho các Unittests Django
- 23. Ứng dụng Metro FileIO.WriteTextAsync Nhiều chủ đề
- 24. Các hoán vị Python chủ đề
- 25. Python nhúng với chủ đề - tránh deadlocks?
- 26. Matplotlib: đồng thời vẽ trong nhiều chủ đề
- 27. jQuery nhiều chủ đề trên một trang
- 28. Python hoặc awk/sed để làm sạch dữ liệu
- 29. Làm cách nào để hủy nhiều chủ đề?
- 30. Chạy nhiều Nhóm Chủ đề tuần tự trong JMeter