n 个并发进程(接口)共用一个公共变量 Q,当 Q 变量需要更新的时候,如何实现进程互斥?

2022-11-01 10:38:39 +08:00
 PEax
各位大佬,我用 flask 写 server 服务,有一个场景不知道怎么处理
1.有一个 API ,里面需要用到一个变量 Q ,变量 Q 有效期 24 小时,且变量 Q 有使用次数限制( 10 次)。
2.当第一个用户调用的时候如果没有变量 Q ,则生成变量 Q 。
3.如何在多人请求的时候只生成一个变量 Q ?
4.如果在多人请求的时候更新变量 Q ?
5.如何避免多人请求的时候污染变量 Q ?
6.如果中途变量 Q 失效,要怎么处理呢?
1985 次点击
所在节点    Python
12 条回复
chenqh
2022-11-01 10:39:25 +08:00
redis? redis 加锁?
yushenglin
2022-11-01 10:43:31 +08:00
redis 就可以实现了
ChenGangS
2022-11-01 10:44:47 +08:00
典型的多进程竞争问题,肯定是加锁解决
sivacohan
2022-11-01 10:50:06 +08:00
1. 要么是并行转串行,Q 前面加一个队列。
2. 要么是通过加锁解决,参考分布式锁。
kwh
2022-11-01 11:03:12 +08:00
多人请求共享锁,更新排它锁
siweipancc
2022-11-01 11:04:32 +08:00
……py 没这块的基础理论吗
PEax
2022-11-01 11:07:47 +08:00
@siweipancc 献丑了。。。py 也是兴趣爱好,我是前端,没写过这种场景的服务
PEax
2022-11-01 11:08:50 +08:00
谢谢各位大佬,我去尝试下。
opengps
2022-11-01 11:09:31 +08:00
redis 共享锁,可以说是能想到的最容易的办法
911061873
2022-11-01 11:09:52 +08:00
搜索一下 单例模式
siweipancc
2022-11-01 11:23:34 +08:00
高安全低性能的,全局锁梭哈。
高性能高性能,过期队列。
中庸方案,自增跟锁两次检查。

多机请用中庸 redis
Jooooooooo
2022-11-01 11:31:49 +08:00
这条件不全呀, A 拿着 Q 要更新的时候, B 也想更新怎么处理呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/891677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX