2
爲什麼Python中的兩個線程實現的行爲不同?爲什麼兩個線程實現的行爲不同?
我有兩個代碼:
1.
from threading import Thread
import pdb
import time
def test_var_kwargs(**kwargs):
time.sleep(5)
print kwargs['name']
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])
def get_call():
thr = Thread(target=test_var_kwargs(name='xyz', roll=12))
thr.start()
print "!!!!!!!!!!!!!!!!!!"
get_call()
print "hohohoo"
get_call()
2.
import threading
import time
class Typewriter(threading.Thread):
def __init__(self, your_string):
threading.Thread.__init__(self)
self.my_string = your_string
def run(self):
for char in self.my_string:
print "in run"
time.sleep(5)
typer = Typewriter("hehe")
typer.start()
print "HHHHHHHHHHHHHHHHHHHHHHHHHHH"
# wait for it to finish if you want to
typer.join()
在第一代碼的執行時,打印語句。和get_call()在5秒後執行,這意味着代碼的下一行執行被阻止。而在第二個代碼中,打印標記。即打印「HHHHHHHHHHHHHHHHHHHHHHHHHHH」而不等待睡眠()時間。
我的問題是爲什麼第一個代碼執行被阻止而第二個代碼被解除阻塞?
+1,真是它更多的語義錯誤,其中python不會將其標記爲錯誤。 thnx – nebi
嘿Nebi,如果答案解決了這個問題,那是很好的stackoverflow禮節來標記它是正確的。它讓稍後閱讀此答案的人立即知道它是正確的。 – aychedee