了解线程

时间:2016-03-18 16:05:29

标签: python

试图了解线程。在我的代码中,它只触发一个线程,当我认为它应该直接进入第二个。我一直在阅读有关锁和分配的内容,但不太了解。我需要做什么才能让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")

2 个答案:

答案 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(),以便表示它们已经终止。