2016-08-03 6 views
0

Ich habe versucht, eine einfache Funktion zu schreiben und sie aus einem Thread für verschiedene Werte aufzurufen. Die Funktion funktionierte perfekt, wenn sie normal aufgerufen wurde. Aber sobald wir es aus einem Thread heraus aufrufen, funktionieren die bedingten Anweisungen innerhalb der Funktion nicht.Python: Beim Threading funktioniert die bedingte Anweisung anders?

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) 
-------------------------------------------------- 

Während des Aufrufs funktioniert die obige Funktion einwandfrei.

print func(2) 
print func(3) 
print func(4) 

Ausgang ist:

In func: count = 2 
Printing Else Count = 2 

In func: count = 3 
Printing If Count = 3 

In func: count = 4 
Printing Else Count = 4 


------------------------------ 

Aber während die gleiche Funktion in einem Thread mit dem Verhalten unterscheidet.

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() 

Ausgang ist:

In func: count = 2 
Printing Else Count = 2 
In func: count = 3 
Printing Else Count = 3 
In func: count = 4 
Printing Else Count = 4 

Kann mir jemand helfen, warum ist das Verhalten anders?

+1

' "{0}". Format (int (Index))' ist string, integer Verwendung 'index' statt – haifzhan

+1

Warum hast du einsetzen, dass "{0}". Format' Aufruf in der Multi-Thread-Version? Ist dir bewusst, dass '(thing,)' ein Tupel ist und '(thing)' '' thing'' ist, wenn man Klammern setzt? – user2357112

+0

Das ist nicht die Ausgabe, die ich für jedes Beispiel erhalten habe, bitte posten Sie die Ausgabe, die mit dem verwendeten Code zusammenhängt. –

Antwort

2

Sie haben den Index als Zeichenfolge an die Funktion übergeben, aber Sie überprüfen die Gleichheit mit einer Ganzzahl.

Auch int(index) ist redundant. Es ist schon ein Int.

Sie können dies überprüfen, indem print type(count)

bearbeiten zu tun: Hier ist ein Beispiel dafür, was du tust.

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

Danke. Wenn ich einen Thread verwende, muss ich ihn als String anpassen. –