关于线程,线程池,任务的理解疑问

来源: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

  1. 理解不正确,SimpleTask是任务,不是线程,把任务提交到线程池里面去执行。

  2. 是的,join用于等待线程池中所有线程的结束。

  3. 因为sleep的过程中,线程池中其他线程也在执行SimpleTask,所以会先打印1,然后各个线程的sleep都结束以后,在打印2,这里你可以调整线程池的线程数量,比如调得小一些,会得到不一样的结果的,可以尝试一下。

0
1
林小堂
谢谢老师!
2020-02-02
共1条回复

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7739 学习 · 1580 问题

查看课程