我是python线程的新手,我首先创建了一个简单的程序,该程序使用两个线程来打印数字1-100。第一个线程打印所有的奇数,第二个线程打印所有的偶数。
最初,我遇到了一个问题,即我的线程只是以尽可能快的速度打印数字,因此数字并不一定总是按顺序排列。我不知道(也没有研究过)如何在python中同步线程,因此我实现了一种简单的技术,使用布尔标志并打开和关闭它们,并使用延迟来“同步”线程。 / p>
看着我的代码,我刚刚意识到我的标志和我的线程具有完全相同的变量名。
为什么python不抛出任何错误?
我的代码:
import time, threading
def printOdd():
global odd, even
for i in range(1, 101, 2):
while not odd:
time.sleep(0.01)
if odd:
print(i)
odd = False
even = True
def printEven():
global odd, even
for i in range(2, 101, 2):
while not even:
time.sleep(0.01)
if even:
print(i)
odd = True
even = False
odd = True
even = False
odd = threading.Thread(target = printOdd)
even = threading.Thread(target = printEven)
odd.daemon = True
even.daemon = True
odd.start()
even.start()
答案 0 :(得分:1)
您会期望什么样的错误?
even, odd
变量不再分配给线程对象并不意味着线程不运行,所以也很好; if condition:
实际上是if bool(condition):
,并且假设Thread
对象是真实的,则第一个线程确实进入了第一个if语句并将even, odd
变量分配给普通的布尔值。很容易看到Thread
对象确实是真实的:
>>> import threading
>>> th = threading.Thread(target=print)
>>> bool(th)
True