我试图编写一个简单的函数,并从一个线程调用它来获取不同的值。正常调用时,该功能完美运行。但是一旦我们从一个线程调用它,函数内部的条件语句就不起作用。
def func(count):
print "In func count = {0}".format(count)
if count == 3:
print "If count = {0}".format(count)
print "Sleeping as count = {0}".format(count)
else:
print "Else count = {0}".format(count)
print "{0} so No sleep".format(count)
--------------------------------------------------
调用上述功能时效果很好。
print func(2)
print func(3)
print func(4)
输出是:
In func: count = 2
Printing Else Count = 2
In func: count = 3
Printing If Count = 3
In func: count = 4
Printing Else Count = 4
------------------------------
但是在线程中使用相同的函数时行为是不同的。
thread_arr = []
for index in range(2,5,1):
thread_arr.append(threading.Thread(target=func, args=("{0}".format(int(index)))))
thread_arr[-1].start()
for thread in thread_arr:
thread.join()
输出是:
In func: count = 2
Printing Else Count = 2
In func: count = 3
Printing Else Count = 3
In func: count = 4
Printing Else Count = 4
任何人都可以帮助为什么行为不同?
答案 0 :(得分:2)
您将索引作为字符串传递给函数,但是您正在检查是否与整数相等。
此外,执行int(index)
是多余的。它已经是一个int。
您可以通过print type(count)
编辑:这是您正在做的事情的一个例子。
>>> x = "{0}".format(1)
>>> x
'1'
>>> type(x)
<class 'str'>
>>> 1 == x
False