编写订单通知类 Python

Writing an Order Notification Class Python

提问人:rustyocean 提问时间:9/15/2023 更新时间:9/15/2023 访问量:12

问:

我有这个简单的类,应该处理人们在线下订单并在商店挑选它们。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)
Python 事件

评论


答: 暂无答案