关于 python3 中的多线程的问题及理解

  1. 什么是 join() ? join() 有什么用?
    答:join() 有一个参数是timeout 设置超时,这里的超时都是针对主线程的,当子线程设置为 join(1) 后,则主线程会等待这个线程 1 秒后继续执行join() 后的过程,如果多个子线程都设置了 join() 那么主线程等待的时间是多个子线程执行超时时间之和,然后继续执行主线程,知道这个后我终于明白了为什么要设置线程列表,然后在列表中循环遍历添加 join(), 这个主要是为了将 子线程 的 启动join() 分开,否则一个子线程启动后直接join() 那么 主线程会立即等待这个子线程,然后不能立刻启动下一个子线程,那么多线程也就没有意义了。
  2. 守护线程的意义?
    答:如果将一个子线程设置为守护线程可以使用 setDaemon(True) 方法,守护线程 也是相对主线程而言的,如果主线程结束,那么不管守护线程有没有结束,哪怕是一个死循环也随着主线程结束而结束。可以说于 join() 方法作用相反。

说完这两个问题,我来说之前我写代码犯的一个错误,我简单写了一个多线程下载图片的工具,为了图片的命名我引入了一个全局变量,在下载函数中我引用了这个全局变量,下载完成后自己增加 1 ,另外多线程的调用函数就是这个下载函数,补充完以上条件后,我来说遇到的问题,我发现下载的图片几乎完全覆盖了,因为他们共用一个全局变量,而多线程的原理 也就是快速的来回切,所以解决的办法就是,在创建线程的时候就给其一个名字,而这个名字是在创建线程的循环时就已经自增完成,并将这个变量当成一个参数传递给这个线程。至此完美解决,不过好像跟我之前说的 join守护线程 关系不大,管他呢

posted @ 2019-02-18 16:41  Hello_wshuo  阅读(31)  评论(0编辑  收藏  举报