V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  EchoUtopia  ›  全部回复第 8 页 / 共 14 页
回复总数  280
1  2  3  4  5  6  7  8  9  10 ... 14  
2017-08-16 19:10:16 +08:00
回复了 DoctorCat 创建的主题 程序员 Python 老人写 Java 代码,想吐,怎么治?
如果你用 java 做和 python 大致一样的事情肯定会这样
好吧,没看到你说不起作用了
gevent 可以把你的 python 同步阻塞代码自动变成异步的,patch_all 加个 httplib=True 参数,你看下在 gunicorn 下对应怎么处理
2017-08-14 12:50:57 +08:00
回复了 ilwid 创建的主题 Python Python 新手问一个搜不出来的问题
@ilwid #12 额,你还是再多看一点 python 面对对象知识再来问吧。我觉得你都没看懂我的回答
2017-08-14 11:10:50 +08:00
回复了 ilwid 创建的主题 Python Python 新手问一个搜不出来的问题
@ilwid #5 额,有点不知道怎么跟你解释了,什么假对象原对象,一个类本来就可以生成很多对象,这些对象也是在内存里面也是独立的。比如 class Person(name):... ;xiaozhang=Person('xiaozhang'); xiaoming=Person('xiaoming');这个例子里你说谁是真对象谁是假对象
2017-08-14 10:56:13 +08:00
回复了 ilwid 创建的主题 Python Python 新手问一个搜不出来的问题
肯定不是原来的对象了啊,你都说了重新实例化了。要得到原来的对象你得通过参数找到原来的对象,比如使用单例模式。
2017-07-25 22:18:11 +08:00
回复了 assad 创建的主题 程序员 我对 Python 的困惑
2017-07-25 10:15:24 +08:00
回复了 assad 创建的主题 程序员 我对 Python 的困惑
@assad 四个线程什么鬼
这应该是 php 本身的限制了,我之前也是写 php 的,对线程、进程、异步、协程什么的觉得很高大上,后面用 python、go了,就觉得那些东西都是很平常的概念了,但是也要看做什么东西了,如果还是只埋头写简答的业务逻辑应该还是接触不了
2017-07-18 15:31:14 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@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 的时候判断了下是不是自己的锁,结果还是一样
2017-07-17 19:02:02 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@lolizeppelin 我使用了新版的 redis 模块:re.set(_lock_key, "locked", nx=True, ex=self._timeout),结果还是一样的,回头再试试这个模块自带的锁
2017-07-17 18:40:34 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@sagaxu 我表述有误,不是随机数,是 random.choice(一个已定义的列表)

@lolizeppelin redis 在本地,没考虑过这个问题。后面实现改成把 last_user_id 放 redis 了。更改去看源码的时候,突然发现 python redis 自己就实现了一个锁,233
2017-07-17 18:12:21 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@zts1993 哦,这个意思啊,懂了。不过现在遇到的这个问题应该不是打印的,我打印的 lock 到 unlock 的时间都没超过1秒
2017-07-17 17:31:58 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@mansur 最后就是这样改的,但是这个问题还没解决

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


@zts1993 我的理解是如果锁已经被其他实例占用,那么这个 multi 的命令不会执行,不知道这样理解对不对
2017-07-17 17:05:29 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@lolizeppelin 你这个异步代码写的好6啊、

@zts1993 什么太复杂了
2017-07-17 16:54:24 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@zts1993 那个 unlock 按我的理解是,如果 key 被其他人删了,那么会触发它的 watch,然后就不删除key了
2017-07-17 16:53:03 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@luoqeng 之前我说了,我测验的时候发现并没有超时,并且我的实现里面有 watch key,如果已经超时,应该是不会去删除 key 的

@zts1993 嗯,这个是别人的 lock,我的 lock 是直接去 setnx 的,都不行。超时时间是加了的,在 setnx 成功后,感觉这一步应该没问题,redis.py 没看到 set nx ex 一条命令的用法,要用 lua 脚本,我待会去试试。unlock 的 transaction 怎么用呢,这个是我为了超时加的,但是我的脚本里没有超时,这也是验证过的。


@lolizeppelin 协程多进程下还是会有同样的问题吧,你这个 ttl 操作有啥特殊原因么
2017-07-17 16:00:30 +08:00
回复了 EchoUtopia 创建的主题 程序员 redis 实现的一个锁有问题,求大神帮忙看看
@sampeng 多线程也是一样,setnx 官方文档并没有说 setnx 是否是原子操作,但网上很多资料都把它当原子操作使用

@tr0uble 这个我考虑过,是因为获得锁的实例超时后导致把别人的锁给删掉,我这个超时时间设的5秒,获得锁的时间为 0.01 秒,我打印时间也表明没有超时

@RubyJack
@sampeng 这个我还没有去看,我现在只是很难过,我不知道到底哪出问题了,并且我没有一点办法,因为太菜,连调试的思路都没有,我之前假装 strace 了以下,问题又不重现了,估计是竟态条件不满足了。


@luoqeng 有可能是这个原因,但是线上时不时的出问题,应该是有问题的,线上的情景是:新创建用户我们给以下操作加锁:获取最后一个用户id,然后加一个随机数作为新用户id。然后并发的时候两个新用户获取到的 last_id 相同,并且随机数相同了,导致出问题。。
2017-07-16 07:44:53 +08:00
回复了 yaozeyuan93 创建的主题 问与答 提交了一个 PHP 的 bug,忐忑
2017-07-16 07:43:22 +08:00
回复了 yaozeyuan93 创建的主题 问与答 提交了一个 PHP 的 bug,忐忑
据说这类 bug 有点多,我以前也遇到过
1  2  3  4  5  6  7  8  9  10 ... 14  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3427 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 10:36 · PVG 18:36 · LAX 02:36 · JFK 05:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.