协程数据竞争
-
codex代码对Python异步编程中协程间数据竞争的处理能力
引言:一个订单状态被同时改错的生产事故 去年我在某电商平台做履约系统压测时,亲眼看见一条订单的状态从“待支付”跳过了“已支付”直接变成了“已发货”。日志追查后发现,不是业务逻辑写错了,而是三个协程同时操作了同一个订单对象,支付回调、风控解冻、库存扣减,在事件循环的同一个迭代周期里,各自基于一个“我看到的还是待支付”的局部快照去修改。最后写入数据库的那个协程覆盖了前面两个协程的有效修改。这不是Pyt…