进程、线程

多任务指的就是在同一时间内执行多个任务。
多任务的执行方式:
1.并发:在一段时间内交替执行任务
2.并行:多核CPU处理多任务

进程:
进程使用步骤:
1.导入进程包multiprocessing    
** 导入import time ** 
2.创建进程    main函数
3.启动进程

time.sleep(n) 让进程休眠n秒,自动失去CPU资源
target 获取当前任务名称 
name 获取当前进程
multiprocessing.current_process()  获取当前进程对象  

1.进程之间不共享全局变量
2.获取进程编号:
2.1 getpid 获取子进程编号
2.2 getppid 获取父进程编号
3.进程传参:
3.1 args=()元组类型
3.2 kwargs={}字典类型
4.主进程会等待所有子进程结束后再结束(想让子进程随着主进程的结束而结束)
4.1 设置terminate(),让进程结束
sub_process.terminate()
4.2 设置子进程为daemon进程,必须在start之前
sub_process.daemon = True
线程:
线程的使用步骤:
1.导入线程包 import threading    import time
2.创建线程   
3.启动线程

1.target\name 与进程一样
2.主线程会等待所有子线程结束后再结束,需要将子线程设置为daemon线程,设置方法有2种
2.1 在创建线程对象的时候,添加daemon参数
sub_thread = threading.Thread(target=函数名, daemon=True)
2.2 在创建线程之后,start之前,设置daemon属性
sub_thread.setDaemon(True)
3.线程传参与进程使用方法一致
4.线程的执行是无序的
5.线程共享全局变量  
5.1 sub_thread1.join()
5.2 join(timeout)  如果给定timeout值,未能在规定的时间内完成任务,则不会再继续等待,而是去执行下面的任务;如果能在给定的时间内完成任务,则效果跟没有给定值的效果是一样的
6.针对全局变量产生的错误,使用互斥锁或同步线程来解决
7.互斥锁:
7.1 创建锁  mutex = threading.Lock()
7.2 上锁  mutex.acquire()
7.3 解锁  mutex.release()
8.死锁
9.获取线程编号 

简单实现进程的小demo:
在这里插入图片描述
简单实现线程的小demo:
在这里插入图片描述
demo结果:
在这里插入图片描述

进程升级版演示:
import multiprocessing
import time
import os
def dance():
    print('dance', os.getpid())   # 获取当前进程编号
    print('dance', multiprocessing.current_process())  # 获取当前进程
    print('dance的父进程编号:', os.getppid())
......
if __name__ == '__main__':
    print('main:', os.getpid())
    print('main:', multiprocessing.current_process())
    dance_process = multiprocessing.Process(target=dance, name='myprocess1')
    
    dance_process.start()
  1. 总结:
    1.线程是依附在进程里面的,没有进程就没有线程。
    2.一个进程默认提供一条线程,进程可以创建多个线程。
    3.进程之间是不共享全局变量的。
    4.线程之间是共享全局变量,但是要注意资源竞争的问题,可以使用互斥锁或者线程同步来解决。
    5.创建进程的资源开销要比创建线程的资源开销大。
    6.进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位。
    7.线程不能够独立执行,必须依附在进程中。
    8.多进程开发比单进程多线程开发稳定性要强。
    9.进程和线程都是完成多任务的一种方式。
    10.多进程要比多线程消耗的资源多,但是多进程开发比单进程多线程开发稳定性要强,某个进程挂掉也不会影响其它进程。
    11.多进程可以使用cpu的多核运行,多线程可以共享全局变量。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值