码迷,mamicode.com
首页 > 其他好文 > 详细

秒杀系统

时间:2020-01-11 11:53:52      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:async   aos   join   pid   RoCE   释放   pytho   row   pool   

秒杀系统(多进程模拟)

'''
秒杀程序
'''
import os

import arrow

import redis

from multiprocessing import Pool

from redlock.lock import RedLock
HOTKEY = 'num' # 设置秒杀数量
r = redis.Redis(host='localhost', port=6379)
# 秒杀函数
def miaosha():
    name = os.getpid() # 获取pid 主要是知道哪个pid执行任务
    v = r.get(HOTKEY)
    if int(v) > 0:
        print (name, '库存',int(v))
        r.decr(HOTKEY) # 自减1
    else:
        print(name,'商品库存为0')

# 不加锁,每5秒中执行一次秒杀函数
def run_without_lock(name):
    while True:
        if arrow.now().second % 5 == 0:
            miaosha() # 秒杀函数
            return
# 使用redlock 模块
rlock = RedLock('miaosha',[{'host': 'localhost','port': 6379,'db': 8,}])
# 使用 锁
def run_with_redis_lock(name):
    while True:
        if arrow.now().second % 5 == 0:
             # 获取锁
            if rlock.acquire():
                # 秒杀函数
                miaosha()
                #  释放锁
                rlock.release()
                return

if __name__ == '__main__':
    p = Pool(80) # 进程池
    r.set(HOTKEY, 10) #  设置10件商品
    for i in range(80):
        # p.apply_async(run_without_lock, args=(i,))  # 异步非阻塞
        p.apply_async(run_with_redis_lock, args=(i,))
    p.close()
    p.join()
    print('执行完毕')

秒杀系统

标签:async   aos   join   pid   RoCE   释放   pytho   row   pool   

原文地址:https://www.cnblogs.com/wuxiaoshi/p/12179241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!