试图了解线程。在我的代码中,它只触发一个线程,当我认为它应该直接进入第二个。我一直在阅读有关锁和分配的内容,但不太了解。我需要做什么才能让2个线程同时独立运行?
import thread
def myproc(item):
print("Thread fired for " + item)
while True:
pass
things = ['thingone', 'thingtwo']
for thing in things:
try:
thread.start_new_thread(myproc(thing))
except:
print("Error")
答案 0 :(得分:5)
你有start_new_thread
签名错误。您正在调用myproc
并将结果作为参数传递给start_new_thread
,这种情况从未发生,因为myproc
永远不会终止。
相反,它应该是:
thread.start_new_thread(myproc, (thing,) )
第一个参数是函数(即函数对象,不调用函数),第二个参数是参数元组。
请参阅:https://docs.python.org/2/library/thread.html#thread.start_new_thread
一旦你的程序实际启动了两个线程,你可能想在最后添加一个暂停,因为线程将在主线程完成时终止。
另外,请考虑使用threading
模块而不是thread
模块,因为它提供了更好的更高级别的界面,例如等待线程完成执行的便捷方式。< / p>
请参阅:https://docs.python.org/2/library/threading.html#module-threading
答案 1 :(得分:2)
在第二个线程有时间完成之前,您的应用程序将退出,我可以告诉您。
在应用程序终止之前,您需要等待两个线程完成,如下所示:
#!/usr/bin/python
import thread
import time
# Define a function for the thread
def print_time(threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print "%s: %s" % ( threadName, time.ctime(time.time()) )
# Create two threads as follows
try:
thread.start_new_thread( print_time, ("Thread-1", 2, ) )
thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
print "Error: unable to start thread"
while 1: # This is a bad solution due to the busy wait loop. More below.
pass
您应该优先存储线程对象,并在退出之前使用thread1.join()
和thread2.join()
,以便表示它们已经终止。