import timefrom threading import Threaddef sleeper(i): print "thread %d sleeps for 5 seconds" % i time.sleep(5) print "thread %d woke up" % ifor i in range(10): t = Thread(target=sleeper,args=(i,)) t.start()
现在这段代码返回以下内容:
thread 0 sleeps for 5 secondsthread 1 sleeps for 5 secondsthread 2 sleeps for 5 secondsthread 3 sleeps for 5 secondsthread 4 sleeps for 5 secondsthread 5 sleeps for 5 secondsthread 6 sleeps for 5 secondsthread 7 sleeps for 5 secondsthread 8 sleeps for 5 secondsthread 9 sleeps for 5 secondsthread 1 woke upthread 0 woke upthread 3 woke upthread 2 woke upthread 5 woke upthread 9 woke upthread 8 woke upthread 7 woke upthread 6 woke upthread 4 woke up
如何线程1在线程0之前醒来同时线程0是第一个进入?
解决方法 最常见的Python-Interpreter(cpython)在一个Thread上运行,你创建的每个Thread都只是虚拟的,并且仍然在一个核心上执行 – 因为它是GIL( https://wiki.python.org/moin/GlobalInterpreterLock).执行它们的顺序不一定是启动thrads的顺序,这就是拥有线程的整个过程–cpython解释器将决定在任何给定时间执行哪个线程的哪一部分.由于您只能使用一个核心而线程只是虚拟的,因此您将无法在同一时间执行2个线程.感谢Vality的纠正.
总结以上是内存溢出为你收集整理的Python线程的工作原理全部内容,希望文章能够帮你解决Python线程的工作原理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)