Nếu bạn thích, bạn chỉ có thể đồng bộ hóa quyền truy cập vào tài nguyên được chia sẻ với threading.Lock
giống như bạn làm trong bất kỳ chương trình được tạo luồng nào khác thay vì sao chép nó.
Bất kể, tôi nghĩ rằng nó đáng để đánh giá mã của bạn có và không có độ sâu và đo lường khác để biết hiệu suất hoạt động tốt/xấu trước khi thực hiện tối ưu hóa. Có lẽ lý do nó là chậm không có gì để làm với deepcopy.
CHỈNH SỬA về việc sử dụng khóa: Ý tôi là bạn có thể sử dụng nhiều khóa hạt mịn hơn quanh tài nguyên này. Tôi cho rằng các chủ đề của bạn đang làm nhiều hơn việc truy cập tài nguyên được chia sẻ. Bạn có thể cố gắng hưởng lợi từ nhiều chủ đề làm việc và sau đó đồng bộ hóa quyền truy cập vào chỉ một "phần quan trọng" có liên quan đến việc ghi vào tài nguyên được chia sẻ. Bạn cũng có thể điều tra việc tạo luồng an toàn tài nguyên được chia sẻ của mình. Ví dụ, nếu có một đối tượng chia sẻ, SillyExampleFriendsList
:
class SillyExampleFriendsList(object):
"""Just manipulates a couple lists"""
def __init__(self):
self._lock = threading.RLock()
self._friends = []
self._enemies = []
def unfriend(self, x):
# we lock here to ensure that we're never in a state where
# someone might think 'x' is both our friend and our enemy.
self._lock.acquire()
self._friends.remove(x)
self._enemies.append(x)
self._lock.release()
Vấn đề ở đây chỉ là các đối tượng trên có khả năng có thể được chia sẻ giữa nhiều chủ đề mà không deepcopy bằng cách sử dụng cẩn thận của ổ khóa. Nó không phải là tầm thường để xác định tất cả các trường hợp mà điều này có thể là cần thiết và chiến lược khóa hạt mịn có thể khó khăn hơn để gỡ lỗi và vẫn giới thiệu chi phí.
Điều đó nói rằng, bạn có thể không cần chuỗi, khóa hoặc bản soi sâu ở tất cả và không có điểm chuẩn mã của bạn, điều đó không rõ ràng nếu bạn gặp sự cố về hiệu suất cần được giải quyết. Tôi tò mò điều gì khiến bạn nghĩ rằng mã của bạn nên, hoặc cần phải nhanh hơn?
Trong những gì nó không đủ nhanh? Máy chủ của bạn không thể xử lý N yêu cầu mỗi giây? Một yêu cầu duy nhất có quá lâu không? Nó có chậm hơn khi bạn tăng số lượng yêu cầu đồng thời không? – stderr
Một yêu cầu duy nhất không mất quá nhiều thời gian. Nó không chậm hơn khi tôi tăng số lượng yêu cầu đồng thời. Kích thước hồ bơi lò phản ứng xoắn được đặt thành 25. – Catalin