提问人:rustyocean 提问时间:9/15/2023 更新时间:9/15/2023 访问量:12
编写订单通知类 Python
Writing an Order Notification Class Python
问:
我有这个简单的类,应该处理人们在线下订单并在商店挑选它们。DeliveryDispatch 类有一个后台任务,用于引入订单并将它们放在“货架”上。
当客户走进来并试图获得他们的订单时,订单要么在那里,他们可以走出去,要么他们会等到设置事件。
我希望看看是否有其他优雅的方法可以解决这个问题:
我还考虑取回订单,在出发前考虑客户愿意等待的时间。
如果客户都并行进来,这也可能是线程安全的吗?
import threading
import time
class DeliveryDispatch:
def __init__(self) -> None:
self.orders = {}
self.wait_q = {}
self.running = True
background_getter = threading.Thread(target = self._run, daemon=True)
background_getter.start()
self.order_lock = threading.Lock()
def run(self) -> None:
while self.running:
order = get_order()
with self.order_lock:
self.orders[order.customer_id] = order.item
if order.customer_id in self.wait_q:
e = self.wait_q.pop(order.customer_id)
e.set()
time.sleep(5)
def retrieve_order(self, customer_id) -> Any:
with self.order_lock:
if customer_id in self.orders:
return self.orders[customer_id]
else:
event = threading.Event()
self.wait_q[customer_id] = event
event.wait()
return self.orders[customer_id]
def main():
delivery = DeliveryDispatch()
c1 = delivery.retrieve_order(1)
c2 = delivery.retrieve_order(2)
c3 = delivery.retrieve_order(3)
答: 暂无答案
评论