# Python中的线程和thread.join导致的内存溢出问题
## 引言
在Python中,多线程编程是非常常见的一种方式。使用多线程可以充分利用多核处理器的优势,提高程序的运行效率。然而,在使用线程的过程中,我们也有可能遇到一些问题,比如线程的阻塞导致内存溢出。本文将探讨这个问题,并给出解决方案。
## 线程和thread.join的概念
在开始解决问题之前,我们先来了解一下线程和th            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2023-08-10 06:44:11
                            
                                216阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、线程编程(Thread)1、线程基本概念1.1、什么事线程线程被称为轻量级的进程线程也可以使用计算机多核资源,是多任务编程方式线程是系统分配内核的最小单元线程可以理解为进程的分支任务1.2、线程特征一个进程中可以包含多个线程线程也是一个运行行为,消耗计算机资源一个线程中的所有线程共享这个进程的资源多个线程之间的运行互不影响各自运行线程的创建和销毁消耗资源远小于进程各个线程也有自己的ID等特征二            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-05 21:18:21
                            
                                171阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            我们直接看代码: 代码如下:1 # encoding: utf-8
 2 
 3 import threading
 4 import time
 5 '''
 6 进程: 启动的应用程序
 7 线程:程序中实际做事情的单元
 8 
 9 主线程和子线程
10 进程启动之后会自动启动一个主线程,主线程启动若干子线程,实现多线程
11 (1)使用join(),使主线程在任务结束之后,进入阻            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-20 15:03:22
                            
                                192阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            MSDN的解释:阻塞调用线程,直到某个线程终止时为止。首先明确几个问题:1、一个进程由一个或者多个线程组成,线程之间有可能会存在一定的先后关系和互斥关系。多线程编程,首先就是要想办法划分线程,减少线程之间的先后关系和互斥关系,这样才能保证线程之间的独立性,各自工作,不受影响。Google的MapReduce核心思想就是尽量减少线程之间的先后关系和互斥关系。2、无论如何地想办法,线程之间还是会存在            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-02-19 16:41:00
                            
                                104阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            举例:程序(Main函数)开始运行,实际上是有一个线程在执行Main函数,我们称作MainThread。假如我们在Main函数中声明了一个Thread,称作NewThread,并且调用了NewThread.Start()的方法时,NewThread线程开始启动并做相应工作。当调用NewThread.Join()方法时,MainThread就被停止执行,直到NewThread线程执行完毕。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2011-10-14 14:40:00
                            
                                140阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            简介 1、使用场景:线程A执行到一半,需要一个数据,这个数据需要线程B去执行修改,只有B修改完成之后,A才能继续操作 2、线程A的run方法里面            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-10-02 00:01:16
                            
                                18阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.子线程不使用join方法join方法主要是会阻塞主线程,在子线程结束运行前,主线程会被阻塞等待。这里用一个例子来说明:# encoding=utf8
import threading
import time
def now():
	return  '%.3f' % time.time()
def test(n):
	print 'start %s at: %s' % (n, now())            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-24 15:41:58
                            
                                81阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            一、使用方式。 join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二、为什么要用join()方法 在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-06-01 11:22:04
                            
                                280阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            1.join()的示例和作用1.1示例1//父线程2publicclassParent{3publicstaticvoidmain(String[]args){4//创建child对象,此时child表示的线程处于NEW状态5Childchild=newChild();6//child表示的线程转换为RUNNABLE状态7child.start();8//等待child线程运行完再继续运行9chi            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-01-12 16:00:24
                            
                                273阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            Blocks the calling thread until a thread terminates, while continuing to perform standard COM and
SendMessage pumping.
Join is a synchronization method that blocks the calling thread (that is, the t            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2017-05-31 16:39:00
                            
                                113阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            一、在研究join的用法之前,先明确两件事情。1.join方法定义在Thread类中,则调用者必须是一个线程,例如:Thread t = new CustomThread();//这里一般是自定义的线程类t.st...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2013-09-30 15:43:00
                            
                                91阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            Java代码 Java代码 现在说到join,大家都知道join方法的试用场景,就是当我们在A线程调用了线程B.join(),则只有线程A会进入BLOCK(实际是WAITING OR TIMED_WAITING)状态,当线程B执行完成后,A线程才会继续执行 看一下join的实现源码,就会发现,内部也            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2019-08-18 22:47:00
                            
                                131阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            1. join() 的示例和作用1.1 示例 1 // 父线程
 2 public class Parent {
 3     public static void main(String[] args) {
 4         // 创建child对象,此时child表示的线程处于NEW状态
 5         Child child = new Child();
 6         //            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-01-18 11:10:31
                            
                                169阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            转自:://blog..net/bzwm/article/details/3881392一、在研究join的用法之前,先明确两件事情。1.join方法定            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2013-11-25 20:59:00
                            
                                104阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            using System;using System.Threading;class MyClass{ static void Main(string[] args) { //线程A Thread ThreadA = new Thread(delegate() { for (int i = 0; i <= 100000000; i++) { if (i % 1000000 == 0) { Console....            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2011-10-17 17:44:00
                            
                                99阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            一、在研究join的用法之前,先明确两件事情。 1.join方法定义在Thread类中,则调用者必须是一个线程, 例如: Thread t = new CustomThread();//这里一般是自定义的线程类 t.start();//线程起动 t.join();//此处会抛出Interrupted            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2016-03-04 14:52:00
                            
                                489阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            API:joinpublic final void join()                throws InterruptedExcepti            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-12-15 23:04:15
                            
                                482阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            这两天一直在研究Thread的调度,把成果拿出来,大家分享一下!本来昨天想要写这篇文章的,无奈51cto的网站不过,无法写!只有推迟到今天!废话不多说!下面是成果!
    thread1.Join()//这样写是告诉大家它不是静态方法         * 三个重载方法,基本功能相同,都是            
                
                    
                        
                                                            
                                                                        
                                                                推荐
                                                                                        原创
                                                                                    
                            2009-12-01 20:52:24
                            
                                10000+阅读
                            
                                                                                    
                                3评论
                            
                                                 
                 
                
                             
         
            
            
            
            使用方法Thread t = new ThreadA();
t.start();
t.join();为什么要用 join() 方法在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其它的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到 join() 方法了。join() 方法            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-21 21:25:25
                            
                                37阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            android 多线程性能优化基础概念CPU核心数和线程数的关系多核心多线程核心数、线程数CPU时间片轮转机制进程和线程进程线程并行和并发并发并行高并发编程优点注意事项Java里的线程线程的启动与中止启动Callable、Future和FutureTask中止run()和start()yield()和join()wait()/notify()/notifyAll()线程间的共享线程间的协作等待/            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-07-26 10:59:14
                            
                                165阅读