线程和进程的关系不太理解,秒杀抢购的案例线程及其执行函数难道不应该放在进程的try里吗?

线程和进程的关系不太理解,秒杀抢购的案例线程及其执行函数难道不应该放在进程的try里吗?

con = redis.Redis(
   connection_pool=pool
)
try:
   con.delete("kill_total", "kill_num", "kill_flag", "kill_user")
   con.set("kill_total", 50)
   con.set("kill_num", 0)
   con.set("kill_flag", 1)
   con.expire("kill_flag", 600)
except Exception as e:
   print(e)
finally:
   del con

executor = ThreadPoolExecutor(200)


def buy():
   connection = redis.Redis(
       connection_pool=pool
   )
   pipline = connection.pipeline()
   try:
       # 如果抢购有效
       if connection.exists("kill_flag") == 1:
           # 监视成功抢购数,成功抢购的ID
           pipline.watch("kill_num", "kill_user")
           # 商品总数
           total = int(pipline.get("kill_total").decode("utf-8"))
           # 成功抢购数
           num = int(pipline.get("kill_num").decode("utf-8"))
           if num < total:
               pipline.multi()
               pipline.incr("kill_num")
               user_id = s.pop()
               pipline.rpush("kill_user", user_id)
               pipline.execute()
   except Exception as e:
       print(e)
   finally:
       if "pipline" in dir():
           pipline.reset()
       del connection


for i in range(0, 1000):
   executor.submit(buy)

print("秒杀已经结束")

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕笑蓉 2020-06-22 10:17:05

同学,你好。同学是指buy()函数和 executor.submit(buy)放到try语句里面吗?这样编写代码会存在问题,如果buy函数放到try语句里,那么调用buy函数会直接越过try语句,这样如果buy函数有代码执行错误,则异常无法捕获,执行的函数 executor.submit(buy) 可以不用放入try语句,因为调用的buy函数已经经过try语句捕获异常了。

如果解决了你的疑惑,请采纳,祝学习愉快~ 

   

  • 提问者 若水愚 #1
    还是不太理解,不是在进程中执行线程吗?进程和线程关系不太理解
    2020-06-22 11:08:07
  • 好帮手慕笑蓉 回复 提问者 若水愚 #2
    同学,你好。进程是资源分配的基本单位,线程是系统调用的基本单位,可以说进程运行要靠线程,同学有不明白的可以详细描述问题,方便老师定位同学要问的内容,帮助同学解答。 祝学习愉快~~~
    2020-06-22 12:28:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师