V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
PEax
V2EX  ›  Python

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

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

    多机请用中庸 redis
    Jooooooooo
        12
    Jooooooooo  
       2022-11-01 11:31:49 +08:00
    这条件不全呀, A 拿着 Q 要更新的时候, B 也想更新怎么处理呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3431 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 11:31 · PVG 19:31 · LAX 03:31 · JFK 06:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.