找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2951|回复: 3

[求助] python多线程问题求解。

2

主题

12

帖子

12

积分

贫民

积分
12
hz_oracle 发表于 2017-6-29 14:43:20 | 显示全部楼层 |阅读模式
如果有多个线程同时操作一个对象,那么可能会造成数据有问题。。所以要用Rlock线程锁。
但是用了线程锁,数据还是串了,求大神帮我看看是什么原因。

代码如下:
  1. import threading
  2. import time


  3. li = []
  4. mylock = threading.RLock()


  5. def fun(arg):
  6.     mylock.acquire()
  7.     global li
  8.     li.append(arg)
  9.     mylock.release()

  10. for i in xrange(1000000):
  11.     t = threading.Thread(target=fun, args=(i,))
  12.     t.start()
  13. time.sleep(1)
  14. for i in li:
  15.     if li[i] != i:
  16.         print i
复制代码


运行结果:
  1. 480885
  2. 480884
  3. 481366
  4. 481365
  5. 481846
  6. 481845
  7. 484384
  8. 484385
  9. 484386
  10. 484383
  11. 839900
  12. 839901
  13. 839902
  14. 839899
  15. 841788
  16. 841787
  17. 898216
  18. 898215
复制代码


回复

使用道具 举报

2

主题

12

帖子

12

积分

贫民

积分
12
hz_oracle  楼主| 发表于 2017-6-29 14:58:09 | 显示全部楼层
没人吗?
回复

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-6-29 18:16:16 | 显示全部楼层
多线程又没说要按顺序来,就算有锁,也是哪个线程获得的锁哪个执行啊,又不是顺序来的,你要这样实现顺序执行,直接单线程循环不就得了,另外你这是大型服务器吗?开这么多线程?
回复 支持 反对

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2017-6-29 18:16:22 | 显示全部楼层
多线程又没说要按顺序来,就算有锁,也是哪个线程获得的锁哪个执行啊,又不是顺序来的,你要这样实现顺序执行,直接单线程循环不就得了,另外你这是大型服务器吗?开这么多线程?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表