我现在已经阅读了几个小时的线程,而我正在做其他人没有的事情。大多数人正在实现一个线程并试图让线程停止。相反,正如您所看到的,下面的类产生了所请求的调用给定函数的线程数。这将允许调用者编写一个函数来说明在数据库中创建记录,并且他们有N个用户执行测试。我不想让我的用户自己创建线程。我遇到的问题是停止用户线程,因为他们将编写将保留在创建记录的while循环内部的代码。我如何杀死线程? t.kill_received = True适用于我的另一个测试,但是对于这个新案例并不适用。这不是生产代码。
class FMpuThread( ):
def __init__( self,threadCount, function, results ):
self.count = threadCount
self.func = function
self.results = results
print 'count: ' + str( self.count ) + ' func: ' + str( function )
def DoTest( self ):
threads = []
# Create correct thread count
for threadId in range(self.count):
print 'Starting thread: ' + str(self.func.__name__) + '(' + str( threadId ) + ')'
t = Thread(target=self.func, args=( threadId, self.results ))
threads.append( t )
t.mStop = False
t.start( )
ti.Sleep(.2) # wait to start next thread
while len(threads) > 0:
try: # Join threads with timeout(don't block)
threads = [t.join(1000) for t in threads if t is not None and t.isAlive()]
except KeyboardInterrupt:
print 'Cancelling all threads. Could take a few seconds.'
for t in threads:
t.mStop = True
sys.exit(0)
答案 0 :(得分:0)
这是tdelaney的想法!谢谢!
好的,这是基本的想法。您希望让另一个类运行x个线程,并且您希望它们都执行相同的操作。您创建一个要调用的函数。该函数执行您想要的操作。这个函数可能有一个while循环,如果有人在Ctrl-C中输入,那么线程spawner类想要控制它。您获取当前线程并询问该线程是否应该继续。当spawner想要停止时,mStop设置为True。
def someFunc( threadID, results ):
ct = threading.currentThread()
while ct.mStop == False:
# Do something here
# Pause( 5 )
# print 'Thread: ' + str( threadID )
results[threadID] = totalRecieved
clientCount = 5
results = [None] * clientCount # initalize entire array
fmThread = FMpuThread( rest, clientCount, tThreadBurner, results )
您需要使用请求的线程计数初始化结果,否则您将在Ctrl-C之后获得断言。
享受!!