V2EX 首页   注册   登录
 EchoUtopia 最近的时间轴更新
ONLINE

EchoUtopia

  •   V2EX 第 119429 号会员,加入于 2015-05-29 01:12:26 +08:00,今日活跃度排名 241
    注册了个有点 2b 的域名
    域名  •  EchoUtopia  •  75 天前  •  最后回复来自 EchoUtopia
    5
    有没有人感兴趣一起参与这个小项目
    分享创造  •  EchoUtopia  •  77 天前  •  最后回复来自 EchoUtopia
    11
    链家更新后二手房数据分析不见了
    问与答  •  EchoUtopia  •  106 天前  •  最后回复来自 EchoUtopia
    12
    数据库中如何存储有向图?
    Python  •  EchoUtopia  •  134 天前  •  最后回复来自 patrickstar
    10
    发现 sublime 的 ctags 和 virtualenv 配合真的好用
    Python  •  EchoUtopia  •  320 天前  •  最后回复来自 jy02201949
    12
    想问一下 linux 哪些发行版本自带 sqlite3 呢
    Linux  •  EchoUtopia  •  2016-05-24 09:57:46 AM  •  最后回复来自 EchoUtopia
    8
    python 文件重定向无效,求帮忙看看
    Python  •  EchoUtopia  •  2016-05-16 21:51:13 PM  •  最后回复来自 WKPlus
    5
    EchoUtopia 最近回复了
    1 天前
    回复了 assad 创建的主题 程序员 我对 Python 的困惑
    1 天前
    回复了 assad 创建的主题 程序员 我对 Python 的困惑
    @assad 四个线程什么鬼
    这应该是 php 本身的限制了,我之前也是写 php 的,对线程、进程、异步、协程什么的觉得很高大上,后面用 python、go了,就觉得那些东西都是很平常的概念了,但是也要看做什么东西了,如果还是只埋头写简答的业务逻辑应该还是接触不了
    @stone1342006
    那个应该没影响,我改成 re.set(_lock_key, "locked", nx=True, ex=self._timeout)是一样的

    @lolizeppelin
    ```
    def unlock(self):
    _lock_key = self._key['_lock:_HolytreeTech']
    pipeline = self._re.pipeline
    with pipeline() as p:
    try:
    p.watch(_lock_key)
    lock_ident = p.get(_lock_key)
    p.multi()
    if lock_ident != self._ident:
    return
    p.delete(_lock_key)
    p.execute()
    except:
    sys.stderr.write("not deleted\n")
    ```
    我 unlock 的时候判断了下是不是自己的锁,结果还是一样
    @lolizeppelin 我使用了新版的 redis 模块:re.set(_lock_key, "locked", nx=True, ex=self._timeout),结果还是一样的,回头再试试这个模块自带的锁
    @sagaxu 我表述有误,不是随机数,是 random.choice(一个已定义的列表)

    @lolizeppelin redis 在本地,没考虑过这个问题。后面实现改成把 last_user_id 放 redis 了。更改去看源码的时候,突然发现 python redis 自己就实现了一个锁,233
    @zts1993 哦,这个意思啊,懂了。不过现在遇到的这个问题应该不是打印的,我打印的 lock 到 unlock 的时间都没超过1秒
    @mansur 最后就是这样改的,但是这个问题还没解决

    @lolizeppelin 你这个是有用到生产环境么,另外你有测试多进程情况吗。那个 setnx 再 expire 应该没问题把,因为 setnx 是原子操作,同时只会有一个实例设置成功,成功后再expire应该也没啥影响吧,没使用一条命令是因为python的redis客户端不支持这样操作


    @zts1993 我的理解是如果锁已经被其他实例占用,那么这个 multi 的命令不会执行,不知道这样理解对不对
    @lolizeppelin 你这个异步代码写的好6啊、

    @zts1993 什么太复杂了
    @zts1993 那个 unlock 按我的理解是,如果 key 被其他人删了,那么会触发它的 watch,然后就不删除key了
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   593 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.7.5 · 45ms · UTC 18:51 · PVG 02:51 · LAX 11:51 · JFK 14:51
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1