Python网编_join方法

前言:我们知道父进程要负责回收子进程占用的系统资源(就是父要给子收尸)so父进程要等子进程结束之后收了尸才能结束,如果父进程先结束,子进程的资源就没法被回收,就会一直占用系统资源,就成了僵尸进程了我们的Python中如果父进程即使运行完了或者报错了也要等待子进程结束收了尸再结束
举个例子:我们要给500个人群发邮件            假设我们每发送一封邮件需要0.1s  总耗时0.1*500 = 50s            那么我们开启了10个进程,每个进程负责50个邮件            所有进程发送完邮件,我们需要得到一个通知:所有的进程都已经发送完毕(文字中的数字不重要,不要纠结)
def send_mail(n):
    print(‘发送邮件%s‘%n)

if __name__ == __main__:
    p = Process(target=send_mail())
    p.start()
    p.join()  # 这个join叫做阻塞,直到子进程执行结束才执行后面的代码
    print(‘所有邮件都已经发出了‘)
那么我们有10个进程呢如何保证这10个进程都结束呢?
if __name__ == __main__:
    lis = []  # 弄个列表装进程
    for i in range(10):
        p = Process(target=send_mail)
        lis.append(p)  # 创建一个子进程 就把这个子进程放到列表中
        p.start()
    for i in lis:
        p.join()  # 把所有的子进程都进行一个阻塞判断
    print(‘所有邮件的都已经发出了’)

总结:join方法可以理解成阻塞,直到被join的进程结束才执行这一句。所以可以join判断进程是否结束

   如果有多个进程需要判断,可以弄一个列表,每生成一个进程,将进程放进去。然后循环这个列表进行join。

原文地址:https://www.cnblogs.com/gzying-01/p/10371525.html

时间: 2024-10-24 21:27:26

Python网编_join方法的相关文章

Python网编_进程对象的其他方法

直接上代码: from multiprocessing import Process import time class MyProcess(Process): def __init__(self,a,b): super().__init__() self.a = a self.b = b def run(self): print('start') time.sleep(0.1) print(self.a,self.b) if __name__ == '__main__': p = MyProc

Python网编_进程间的数据共享

Manager提供了很多数据共享机制,但是对于一些基础数据类型来说,是数据不安全的,那么Q:如何解决呢? A: 需要我们自己手动加锁 from multiprocessing import Manager,Process,Lock # Process开子进程用,Lock数据加锁用,Manager进程间数据共享用 def work(d,lock): # lock.acquire() # d['count'] -= 1 # lock.release() with lock: # 上下问管理 注意了l

python网编并发数据库

第一部分 必答题 简述 OSI 7层模型及其作用?(2分) 应用层:与用户直接交互,软件.网站等 表示层:使用软件.网站可以查看的数据,图片等 会话层:保持登录状态,电脑中为cookie 传输层:选择TCP/UDP协议,进行数据发送. 网络层:通过IP路径寻址,并且对数据进行封装 数据链路层:使用mac地址寻址,又进行了数据封装 物理层:将上面得到的数据转化为信号 简述 TCP三次握手.四次回收的流程.(3分) 三次握手: 第一次握手:Client将标志设置为SYN=1,随机产生一个seq=J,

Python网编_进程之间的数据隔离

写在前面: 控制台的本质是一个文件 文件操作的时候尽量不要用r+ w+ a+ 如果用要小心文件指针混乱 随着进程数量的增多会有一些隐患 from multiprocessing import Process n = 100 # 定义一个全局变量 def func(): global n # 通过global改变n的值 n -= 1 if __name__ == '__main__': lis = [] for i in range(2): # 开启两个进程 p = Process(target=

Python网编_守护进程

假如我有500台机器,跑着500个进程,假如有一部分台机器挂了,我们怎么能及时的知道呢?我们维护自己的机器当然要及时的直到啦so 如果我们有一个监控的软件来实时的监控是不是就可以解决这个问题啦其原理是:client端每隔一个时间段(比如60秒)汇报给server端 没有在正确的时间收到某台机器的汇报就说明这台机器出问题了,应该去看一看.那么如何做呢?在client端的主进程中开启一个子进程,通过这个子进程来汇报,看下面: from multiprocessing import Process i

Python网编_进程池的回调函数

将n个任务交给n个进程去执行每一个进程在执行完毕之后会有一个返回值,这个返回值交给callback函数指定的那个函数去处理这样的话所有的进程哪一个执行的最后快,哪一个就可以先进性统计工作这样就能在最短的时间内得到我们想要的结果 import time import random from multiprocessing import Pool def get(i): # 使用i模拟网站地址 在子进程中执行 time.sleep(random.random()) # 模拟不同的网站返回数据的时间

python多线程编程之Queue---put/get 方法的阻塞

python 中,队列是线程间最常用的交换数据的形式.Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 1. 阻塞模式导致数据污染 import Queue       q = Queue.Queue(10)       for i in range(10):               myData = 'A'               q.put(myData)               myData = 'B' 这是一段极其简单的代码,但我总是不能

内网端口转发方法汇总

内网端口转发方法汇总 I. Sample Baklinks with "lcx.exe" first download lcx.exe from attach.blackbap.org/down/yclj/lcx.exe the program only can running in Windows Server, the program can backlink 3389 to another server. Opening and Listening a Port(like 333

Python 多进程编程之multiprocessing--Process

Python 多进程编程之multiprocessing 1,Process 跨平台的进程创建模块(multiprocessing), 支持跨平台:windowx/linux 创建和启动      创建格式:p=Process(target=函数名)----def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):group:分组(基本不用)target:表示这个进程实例所调用的对象.name:给进程起一