-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsample2.py
More file actions
77 lines (64 loc) · 2.25 KB
/
sample2.py
File metadata and controls
77 lines (64 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import queue
import threading
import time
import sys
class Logger:
def __init__(self):
self.lock = threading.Lock()
def log(self, message):
with self.lock:
timestamp = time.strftime("[%Y-%m-%d %H:%M:%S] ")
print(f"{timestamp}{message}")
class MessageQueue:
def __init__(self, logger):
self.message_queue = queue.Queue()
self.lock = threading.Lock()
self.logger = logger
def send_message(self, message):
with self.lock:
self.message_queue.put(message)
self.logger.log(f"Sent message: {message}")
def receive_message(self):
while True:
with self.lock:
try:
message = self.message_queue.get_nowait()
self.logger.log(f"Received message: {message}")
except queue.Empty:
pass
time.sleep(1) # sleep for 1 second to avoid busy-waiting
class MessageSender(threading.Thread):
def __init__(self, queue_instance, message, logger):
super().__init__()
self.queue_instance = queue_instance
self.message = message
self.logger = logger
def run(self):
while True:
self.queue_instance.send_message(self.message)
self.logger.log("Message sent")
time.sleep(3) # sleep for 3 seconds before sending the next message
class MessageReceiver(threading.Thread):
def __init__(self, queue_instance, logger):
super().__init__()
self.queue_instance = queue_instance
self.logger = logger
def run(self):
while True:
self.queue_instance.receive_message()
self.logger.log("Message received")
# Membuat instance dari kelas Logger dan MessageQueue
logger_instance = Logger()
message_queue_instance = MessageQueue(logger_instance)
# Membuat thread untuk mengirim dan menerima pesan
send_thread = MessageSender(message_queue_instance, "Hello from Sender", logger_instance)
receive_thread = MessageReceiver(message_queue_instance, logger_instance)
# Mulai kedua thread
send_thread.start()
receive_thread.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
# print("Program terminated by user.")
sys.exit()