pycharm
多任务的实现可以用进程和线程来实现
进程—> 线程----> 多任务应用
比如下载多个文件, 利用cpu 资源 提高效率
多任务: 同一时间执行多个任务, 比如windows操作系统
执行方式有两种( 表现形式 )
在单核cpu中:
在一段时间内交替执行多个任务, 例如单核cpu 处理多任务, 操作系统让各个任务交替进行
多核cpu 给每个核都分配一个任务 每个核执行自己的任务
真正意义上的同时执行
python 中实现多进程来实现多任务, 进程是操作系统进行资源分配和调度的最小单位, 一个运行起来的程序叫做进程, 没有在运行的程序叫做程序
当一个.py 文件运行的时候系统会创建一个主进程
比如
def fun1():
print(1)
def fun2():
print(2)
fun1()
fun2()
代码运行的时候系统会先执行fun1 在执行fun2 按顺序运行
使用多进程的话: 在程序运行的时候会创建一个主进程, 那么在程序运行除了主进程之外创建一个子进程, 我们让主进程去执行fun1(), 让子进程去执行fun2(), 让他们两个同时执行, 来实现多任务同时进行
首先要知道如何去创建第二个进程, 第三个进程, 进程的创建有三个步骤
import multiprocessing
import threading
import time
import os
def fun1():
for i in range(3):
print('1')
time.sleep(1)
def fun2():
for i in range(3):
print('2')
time.sleep(3)
if __name__ == '__main__':
sing_thread = threading.Thread(target=fun1)
song_thread = threading.Thread(target=fun2)
sing_thread.start()
song_thread.start()
进程对象 = multiprocessing.Process(target= 任务名)
参数名 | 说明 |
---|---|
target | 执行的目标任务名, 这里指的是函数名(方法名) |
name | 进程名, 一般不用设置(系统自动为进程设置默认名字Process-1····) |
group | 进程组, 目前只能使用None |
必须要指定进程的名字target
def none():
pass
process = multiprocessing.Process(target=none)
process.start()
参数名 | 说明 |
---|---|
args | 以元祖的方式给任务传递参数, 顺序要正确 |
kwrags | 以字典的方式给执行任务传递参数, key 跟参数名要一致 |
process = multiprocessing.Process(target=function, args=(10,))
arg传递的必须是参数所以传递一个变量的时候需要(10,)
process = multiprocessing.Process(target=function, kwargs={'key': value})
import multiprocessing
import time
import os
def fun1(num):
print('1进程PID', os.getpid())
print('1进程父进程编号', os.getppid())
for i in range(num):
print('1....\n')
time.sleep(0.5)
def fun2(num):
print('2进程PID', os.getpid())
print('2进程父进程编号', os.getppid())
for i in range(num):
print('2...')
time.sleep(0.5)
# 1. 导入进程包
if __name__ == '__main__':
sing_process = multiprocessing.Process(target=fun1, args=(5,))
dance_process = multiprocessing.Process(target=fun2, kwargs={'num':2}) # target
#3. 启动进程
sing_process.start()
dance_process.start()
import os
os.getpid()
def work():
print('work 进程编号', os.getpid())
print('work 父进程编号', os.getppid())
主进程默认不会结束, 在子进程全部结束之后才会关闭主进程
在实际中我们想要的效果, 主进程关闭,, 子进程全部关闭
希望主进程关闭的时候子进程不在执行. 则需要设置守护选项
子进程对象.daemon=True
那么在主进程运行完成之后, 那么子进程也将会自动结束
os.mkdir(dir)
实现多任务的另一种形式, 进程是分配资源的最小单位, 线程是程序执行的最小单位, 一个进程中最少有一个线程来负责该进程, 比如一个QQ(一个进程) 打开了两个窗口(两个线程)跟两个人聊天, 线程自己并不需要系统资源, 线程与其他线程共享这个进程的资源, 因此使用多线程的时候实现了资源节约,
线程的创建步骤
import threading
线程对象=threading.Thread(target=任务名)
参数名 | 说明 |
---|---|
target | 执行目标的任务名, 这里值函数名( 方法名) |
name | 线程名, 一般不用设置 |
group | 线程组, 目前只能使用None |
其他的一毛一样
进程优缺点:
优点:可以用多核
缺点:资源开销大
线程优缺点
优点: 资源开销小
缺点:不能使用多核
本笔记总结于bilibili 黑马程序员
多进程多线程视频
一、导读 本文主要介绍Redhat7.6系统安装oracle 12201版本RAC的一些坑以及避坑方...
最近在和团队规划OKR目标的时候,我们讨论了很多问题,我先抛砖引玉,列举了一些...
ajax传送json格式数据,关键是指定contentType,data要是json格式 如果是restful...
Eval 计算一个表达式的值并返回结果。 语法:[result = ]eval_r(expression_r) e...
如果你想对使用手机,平板电脑和辅助技术的用户隐藏某些内容,而只对键盘用户显...
一. RabbitMQ 简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用...
今天给大家分享四个在实际开发中,比较实用的SQL Server脚本函数,希望对大家能...
Linux 发行版的爱好者们又有全新的 Linux 可以体验了,日前一款名为 TeLOS 的 Li...
Afrikaans:af Albanian:sq Basque:eu Belarusian:be Bulgarian:bg Catalan:ca Ch...
本文分享自华为云社区《 架构可视化支撑系统演进探索 》原文作者无名小溪。 随着...