Python:虽然线程化为什么条件语句的工作方式不同?

时间:2016-08-03 18:19:42

标签: python multithreading conditional

我试图编写一个简单的函数,并从一个线程调用它来获取不同的值。正常调用时,该功能完美运行。但是一旦我们从一个线程调用它,函数内部的条件语句就不起作用。

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

任何人都可以帮助为什么行为不同?

1 个答案:

答案 0 :(得分:2)

您将索引作为字符串传递给函数,但是您正在检查是否与整数相等。

此外,执行int(index)是多余的。它已经是一个int。

您可以通过print type(count)

进行检查

编辑:这是您正在做的事情的一个例子。

 >>> x = "{0}".format(1)
 >>> x
 '1'
 >>> type(x)
 <class 'str'>
 >>> 1 == x
 False