采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
很认真的把这节课看了好几遍,最后自己写了一个小demo测试了一下,
跑了很多遍,得到的结果都是
,让我不禁产生了疑问,这个应该就是全局GIL起到的作用,但是和java的同步锁机制好像不太一样,这个怎么看都是执行完了一个线程中所有代码再执行另一个线程,还是说我的写法有问题- -
我有点没看懂,你启用2到3个线程,别弄主线程 试试
我开启了两个线程,结果还是和刚刚一样的,等把线程1的循环执行完毕了才会执行线程2的循环,但是我记得同步锁的概念是防止同时操作一个元素,并不是执行完了一个线程再执行另外一个啊,这样线程不是没有意义了吗,老师我的理解可能还是不到位..
其实我觉得还是 代码太简单。GIL会让不同的bytes code来轮换执行,他不是代码级别的轮换,而是bytes code层面上的轮换
好的老师,谢谢您了
def worker1(): t = threading.current_thread() time.sleep(1) print(t.getName(), time.time()) for i in range(10): print('round {}'.format(i)) t1 = threading.Thread(target=worker1, name='t1') t2 = threading.Thread(target=worker1, name='t2') t3 = threading.Thread(target=worker1, name='t3') t1.start() t2.start() t3.start()
建议试试这段代码,明显能看出t1,t2,t3并不是同步执行的。
原代码里肯定是先执行主线程。如果你想看到两个线程之间切换的效果,可以启动两个子线程,并且线程(函数)里加一个time.sleep().你就可以看到线程1运行到sleep的时候,程序切换到了线程2
登录后可查看更多问答,登录/注册
7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程
1.3k 20
2.6k 17
2.4k 15
2.6k 14
1.5k 13
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号