Mercurial
comparison grok_interview/thread.py @ 60:d64a8c189a77
Merged
| author | June Park <me@mrjunejune.com> |
|---|---|
| date | Sat, 20 Dec 2025 13:56:01 -0500 |
| parents | 68fa88ac73fe |
| children |
comparison
equal
deleted
inserted
replaced
| 50:983769fba767 | 60:d64a8c189a77 |
|---|---|
| 1 # 1. data struture {} | |
| 2 # - multiple threads can access it | |
| 3 # - multiple threads can edit it if it is editable. (mutex) | |
| 4 | |
| 5 | |
| 6 from hashlib import sha256 | |
| 7 from threading import Lock | |
| 8 | |
| 9 class Subscribers: | |
| 10 def __init__(self): | |
| 11 self.id = sha256() | |
| 12 | |
| 13 def on_event(self, event): | |
| 14 pass | |
| 15 | |
| 16 class Publisher: | |
| 17 def __init__(self): | |
| 18 self._subscritions = {} | |
| 19 self.lock = Lock() | |
| 20 | |
| 21 def publish_event(self, event): | |
| 22 for subscriber_id, subscriber in enumerate(self._subscritions): | |
| 23 subscriber.on_event(event) | |
| 24 | |
| 25 def add_subscribers(self, subscriber: Subscribers): | |
| 26 with self.lock: | |
| 27 self._subscritions[subscriber.id] = subscriber | |
| 28 | |
| 29 def remove_subscribers(self, subscriber: Subscribers): | |
| 30 with self.lock: | |
| 31 del self._subscritions[subscriber.id] | |
| 32 |