python中进程和线程的使用

一、进程

1.守护进程

from multiprocessing import Process
import time

def task1():
    while True:
        print('task1')
        time.sleep(1) # 阻塞1s

def task2():
    for i in range(6):
        print('task2')
        time.sleep(1)

if __name__ == '__main__':
    p1 = Process(target=task1)
    p1.daemon = True # 表示设置p1是一个守护进程
    p1.start()
    p2 = Process(target=task2).start()
    time.sleep(3)
    print('main')
# 主进程会等待所有的子进程结束,是为了回收子进程的资源
# 守护进程会等待主进程的代码执行结束之后再结束
# 主进程的代码什么时候结束,守护进程就什么时候结束,和其他进程执行无关

在这里插入图片描述
可以看到,子进程和主进程是一起开始执行的,主进程中延时了3s,所以task2执行了3次,task1执行额3次,然后执行了主进程的main,之后,因为task1设置了守护进程,所以在主进程执行结束之后task1不执行了,但是task2共需执行6次,才执行3次,因此task2又执行了3次。

2.阻塞进程

应用:开辟一个进程,给冷月枫发邮件,发送完毕之后打印发送邮件完成

   p.join()  # 阻塞: 直到p这个进程执行完毕之后才继续执行
import os
from multiprocessing import Process

def func(name,email):
    # os.getpid() 获取进程ID
    # os.getppid() 获取父进程ID
    # print(os.getpid(), os.getppid(),name)
    print('给%s发送一个%s'%(name,email))

if __name__ == '__main__':
    # print('main:',os.getpid(), os.getppid())
    # args=('冷月枫',) 传递参数,值必须是一个元组
    p = Process(target=func,args=('冷月枫','邮件'))  # 把func函数添加到进程中
    p.start() # 开启这个进程
    p.join()  # 阻塞: 直到p这个进程执行完毕之后才继续执行
    print('邮件发送完成')


不加p.join()的效果:
在这里插入图片描述

加p.join()的效果:
在这里插入图片描述

二、线程

import time
from threading import Thread,current_thread

def func(i):
    print('start%s'%i,current_thread().ident)  #输入出当前线程的ID
    time.sleep(1)
    print('end%s'%i)
if __name__ == '__main__':
    t1 = []
    for i in range(10):
        p1 = Thread(target=func,args=(i,))
        # p1.daemon = True #守护线程
        p1.start()
        t1.append(p1)
    for p in t1:
        p.join()  # 阻塞   等待p1线程执行完毕后才继续执行
    print('所有的线程都执行完了')

效果:
在这里插入图片描述
可见线程的进程的操作是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值