关于线程,线程池,任务的理解疑问
来源:8-8 编写测试用例

林小堂
2020-02-01
老师您好,在写测试用例的时候,实现一个process函数,用于打印一些东西
def process():
#多个任务会并发执行
time.sleep(1)
print "This is a SimpleTask callable function... 1"
time.sleep(1)
print "This is a SimpleTask callable function... 2"
然后还实现了一个SimpleTask类,
class SimpleTask(Task.Task):
def __init__(self, callable): #传递一个函数引用
super(SimpleTask, self).__init__(callable) #直接调用父类的构造函数
请问老师,
1.在执行
simple_task = SimpleTask(process)
test_pool.put(simple_task)
的时候,是否可以理解为每一个simple_task 就是一个线程,然后将这一个个线程添加到线程池中去执行呢?
2是否应该在添加完成后,最后用test_pool.join()来结束线程池呢?像下面这样:
def test(task_num = 10):
#1.初始化线程池
test_pool = Pool.ThreadPool(100)
test_pool.start()
#2.生成一系列任务
for i in range(task_num):
simple_task = SimpleTask(process)
#3.往线程池提交任务
test_pool.put(simple_task)
test_pool.join()
否则的话线程池是否会一直不停止?
3.执行结果为
显示执行了function1,又执行了function2应该怎样理解呢?
期待老师对上述问题的答复,谢谢老师,麻烦了。
写回答
1回答
-
咚咚呛
2020-02-01
理解不正确,SimpleTask是任务,不是线程,把任务提交到线程池里面去执行。
是的,join用于等待线程池中所有线程的结束。
因为sleep的过程中,线程池中其他线程也在执行SimpleTask,所以会先打印1,然后各个线程的sleep都结束以后,在打印2,这里你可以调整线程池的线程数量,比如调得小一些,会得到不一样的结果的,可以尝试一下。
012020-02-02
相似问题