不添加join子线程也会执行

不添加join子线程也会执行

老师,不添加join,返回到结果一样,时间还更短。

if __name__ == '__main__':
    start = time.time()
    print('old list lenth:', len(lists))
    # 线程调用
    # t_list = []
    for i in range(len(lists)):
        # 普通函数调用
        # work()  # 用时大概7秒
        # 创建线程
        t = threading.Thread(target=work)
        # 将线程对象添加到列表
        # t_list.append(t)
        # 启动线程
        t.start()

    # 阻塞主线程
    # for t in t_list:
    #     t.join()

    print('old list:', lists)
    print('new list:', new_lists, len(new_lists))
    print('time is %s' % (time.time() - start))
old list lenth: 7
old list: []
new list: ['flask_new', 'tornado_new', 'python_new', 'django_new', 'bs5_new', 'uvloop_new', 'requests_new'] 7
time is 0.0009450912475585938
Process finished with exit code 0


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!不阻塞主线程,程序运行的速度是比较快的。但是不阻塞主线程可能有一种情况出现,即:主线程比子线程先执行完程序,这样子线程的功能就没有执行,所以建议阻塞主线程。祝学习愉快~

  • 呆呆桃 提问者 #1

    老师,您好!我还是不太明白什么情况下主进程/主线程运行完,子进程/子线程就不会运行了,需要阻塞主进程/主线程。

    1 在学进程的创建的时候,并没有阻塞主进程,子进程还是在主进程运行完后执行。

    2 但是在学进程池的时候,就必须要阻塞,子进程才能执行。

    3 学线程的创建的时候,不阻塞也可以运行。


    在没有阻塞的情况下,都是先执行主进程/主线程,再执行子进程/子线程吗?

    不管是进程,进程池,还是线程,是都需要阻塞主进程/主线程,才能完全确保子进程/子线程执行的吗?如果是,那么在讲进程创建的时候,为什么不阻塞也可以正常运行呢?


    2022-07-06 10:41:03
  • 好帮手慕小猿 回复 提问者 呆呆桃 #2

    同学,你好!

    1、对于进程池我们是必须要阻塞的,如果主进程运行结束,进程池的代码将无法执行

    2、创建进程、线程的时候可以阻塞,也可以不阻塞,阻塞目的是先执行完子线程或子进程的代码,再执行后续的主进程或主线程的代码。不阻塞是先执行的主进程或主线程,主进程或主线程结束后子进程或子线程再运行。

    3、不阻塞也可以正常运行,但是主进程和子进程的执行顺序是不一样的。

    祝学习愉快~

    2022-07-06 16:38:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师