python多任务与简单进程

什么是对多任务?

简单理解就是,在同一时刻多个任务同时执行,例如开演唱会时明星一边唱歌,一边跳舞,每唱一句歌词,都要进行同步动作,就像视频中的图像与音频匹配。这个就是多任务场景,然而在生活中这种例子是比比皆是的。然而对于电脑而言,在操作系统中同时运行qq,微信,游览器等等软件。

电脑是如何实现多任务得原理

例如上面说的qq,微信,游览器3个应用程序能同时运行是因为cpu在多个应用程序之间高速切换,以至于你的肉眼或许看不到卡顿的现象,导致我们的错觉感觉是同时运行的效果,如果电脑出现卡顿现象是因为cpu切换不过来了。
什么是单核,什么是双核cpu?
单核cpu指的是cpu中有一个核心,用来处理程序
为了增加运行cpu计算能力,便出现了双核cpu,即一个cpu中有两个核心,四核,八核也是同样的道理。

什么样的cpu才好呢?

例如英特尔公司的Intel,i3,i5,i7,i9当时是i9最好,如果要细分,这里大概说一下,比如Intel® Core™ i5-6200U CPU @ 2.30GHz中的2.30GHz代表一秒的计算次数,运算速度,越高越好。

是进程与多进程?

在操作系统中不运行的程序被称作为程序,但是当他被操作系统加载到内存中,运行起来,他就是一个进程。那么是否可以将一个程序加载多次,导致有多个进程,但是程序只有一个,比如qq,一台电脑可能不只是登录一个账号,可以登录很多账号,这就构成了多进程。

那么在python中如何创建多进程

任务目标我们让明星不使用多进程先唱歌再跳舞

import time
def sing():
    '''明星在唱歌'''
    for i in range(3):
        print('---正在唱歌---')
        time.sleep(1)
def dance():
    '''明星在跳舞'''
    for i in range(3):
        print('---正在跳舞---')
        time.sleep(1)

if __name__ == '__main__':
    sing()
    dance()

'''
运行结果:

---正在唱歌---
---正在唱歌---
---正在唱歌---
---正在跳舞---
---正在跳舞---
---正在跳舞---
'''

我们再使用进程让明星边唱歌边跳舞

import time
import multiprocessing  #导入多进程模块

def sing():
    '''明星唱歌'''
    for i in range(3):
        print("---正在唱歌---")
        time.sleep(1)
def dance():
    '''明星跳舞'''
    for i in range(3):
        print("---正在跳舞---")
        time.sleep(1)

def main():
    p1=multiprocessing.Process(target=sing)   #创建进程p1,执行sing函数
    p2=multiprocessing.Process(target=dance)   #创建进程p2,执行dance函数
    p1.start()   #开始执行进程1
    p2.start()   #开始执行进程2
    #   开启了2个子进程 p1,p2

if __name__ == '__main__':
    main()

'''
运行结果:

---正在唱歌---
---正在跳舞---
---正在唱歌---
---正在跳舞---
---正在唱歌---
---正在跳舞---
'''

结论:通过创建进程,执行相应的函数,进行多任务操作
分析代码:
主程序从mian()开始执行,也就是执行if _name_ == ‘_main_’:
中的代码块。当执行p1.start()时,创建一个子进程,p1子进程中的代码和主进程相同,只是程序执行的开始时sing函数体。主进程执行到p2.start()时,同样复制一份主程序代码从dance函数体开始执行。
多进程虽然提高了代码的运行效率,但是多任务耗费的资源还是比较大的,一个进程就需要一份系统的资源。

进程的状态

在程序运行的过程中,因为在操作系统中运行所以会被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。
(1)就绪状态
当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
(2)执行/运行状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
(3)阻塞状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等

发布了38 篇原创文章 · 获赞 128 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lujiangyang123/article/details/103863434