下载地址:www.pan38.com/dow/share.p… 提取密码:2819
这个示例展示了多线程抢单系统的基本架构,包含订单生成、用户抢单和日志记录功能。实际商业环境中这类系统要复杂得多,会涉及反作弊机制、分布式处理等技术。
import time import random import threading from queue import Queue from datetime import datetime
class OrderSystem: def init(self): self.available_orders = Queue() self.order_lock = threading.Lock() self.log_file = "order_log.txt"
def generate_orders(self):
order_types = ['外卖', '快递', '代购', '跑腿']
while True:
order_id = random.randint(1000, 9999)
order_type = random.choice(order_types)
price = round(random.uniform(10, 100), 2)
with self.order_lock:
self.available_orders.put({
'id': order_id,
'type': order_type,
'price': price,
'time': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
})
time.sleep(random.uniform(0.5, 2))
def log_order(self, order, user):
with open(self.log_file, 'a') as f:
f.write(f"{datetime.now()}: 用户{user}抢到订单{order['id']}({order['type']}), 价格{order['price']}元\n")
class Grabber: def init(self, system, user_id): self.system = system self.user_id = user_id self.success_count = 0
def grab_order(self):
while True:
if not self.system.available_orders.empty():
with self.system.order_lock:
if not self.system.available_orders.empty():
order = self.system.available_orders.get()
self.system.log_order(order, self.user_id)
self.success_count += 1
print(f"用户{self.user_id}抢到订单: {order}")
time.sleep(0.1)
def main(): system = OrderSystem() users = [Grabber(system, i) for i in range(1, 6)]
# 启动订单生成线程
generator_thread = threading.Thread(target=system.generate_orders)
generator_thread.daemon = True
generator_thread.start()
# 启动抢单线程
grabber_threads = []
for user in users:
t = threading.Thread(target=user.grab_order)
t.daemon = True
grabber_threads.append(t)
t.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("\n抢单结束")
for i, user in enumerate(users, 1):
print(f"用户{i}共抢到{user.success_count}单")
if name == "main": main()