python 控制线程数
用python写多线程的脚本,需要控制线程数。需要自己判断线程是否运行完毕。测试代码如下:
#!/bin/env python # ------------------------------------------------------------------------------- # Filename: my-thread.py # Revision: # Date: 2012-12-19 # Author: simonzhang # web : www.simonzhang.net # Email: simon-zzm@163.com # ------------------------------------------------------------------------------- ####加载多线程模块 import threading ####需要个随机数和延迟,为测试用 import random from time import sleep #### 多线程运行的测试部分。循环3次,每次间隔0到2的随机秒数, #### 等待后打印,运行总次数,线程数和循环值 def test_func(thread_number,sequence): for i in range(3): sleep(random.randint(0,2)) print('run sequence:%s thread %d is running %d ' % (sequence,thread_number,i)) def main(): #### 定义循环序列,就是一个线程池 threads = [] #### 定义总共运行的次数 all_number = 5 #### 定义运行所使用的线程数 thread_lines = 3 #### 定义开始线程数 start_line = 0 #### 首先构建线程池 for i in range(0,thread_lines): t = threading.Thread(target=test_func, args=(i,start_line,)) threads.append(t) start_line +=1 #### 运行第一批线程的任务 for t in threads: t.start() #### 循环运行全部任务 for number_line in xrange(start_line,all_number): #### 初始化当前线程的状态 thread_status = False #### 初始化检查循环线程的开始值 loop_line = 0 #### 开始循环检查线程池中的线程状态 while thread_status == False : #### 如果检查当前线程,如果线程停止,代表任务完成,则分配给此线程新任务, #### 如果检查当先线程正在运行,则开始检查下一个线程,直到分配完新任务。 #### 如果线程池中线程全部在运行,则开始从头检查 if threads[loop_line].isAlive() == False : t = threading.Thread(target=test_func, args=(loop_line,number_line,)) threads[loop_line]=t threads[loop_line].start() thread_status = True else: if loop_line >= thread_lines-1 : loop_line=0 else: loop_line+=1 #### 等待超时 sleep(30) #### 结束所有线程 for number_line in xrange(start_line,thread_lines): thread[number_line].exit() if __name__ == "__main__": main()
本代码存在一个问题,运行完毕后主进程在运行,程序走到下一步,但是还有线程也在运行。所以需要在调用全部完毕后,有一段检查线程是否全部结束,可以使用jion()进行阻塞判断即可。根据实际需要编写。
在python文档里面都没有Thread.exit()这个方法
你看你的版本,下面是官方文档里的内容。
start(self)
Start the thread’s activity.
It must be called at most once per thread object. It arranges for the
object’s run() method to be invoked in a separate thread of control.
This method will raise a RuntimeError if called more than once on the
same thread object.
thread部分
exit(…)
exit()
(exit_thread() is an obsolete synonym)
This is synonymous to “raise SystemExit”. It will cause the current
thread to exit silently unless the exception is caught.