python多进度与协程

来源:http://www.sh-fengwen.com 作者:鲜果干果 人气:62 发布时间:2019-11-01
摘要:我们大多数的时候使用多线程,以及多进程,但是python中由于GIL全局解释器锁的原因,python的多线程并没有真的实现 美高梅游戏平台网站,1、进程的概念 什么是进程—CPU在同一时刻只

    我们大多数的时候使用多线程,以及多进程,但是python中由于GIL全局解释器锁的原因,python的多线程并没有真的实现

美高梅游戏平台网站,1、进程的概念

什么是进程—>CPU在同一时刻只能处理一个任务,只是因为cpu执行速度很快。
cpu在各个任务之间来回的进行切换。
进程的概念:正在进行的一个过程或者说一个任务,而负责执行任务的则是CPU,进程本身是
一个抽象的概念,即进程就是一个过程、一个任务。
CPU描述的是一个程序的执行过程.
进程之间是如何做到并发的:CPU在各个任务之间来回的进行切换,并在切换的过程当中保存当前
进程的执行状态(保存蛋糕的执行过程)。
进程与程序的区别:程序相当于菜谱,而进程相当于做菜的整个过程。
电子游戏美高梅网址,需要强调的是:同一个程序执行两次(双击),那也是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播放a,一个可以播放b.
核的概念:
处理器,就是说有几个处理器。。。也就说一个CPU里面会有几个处理器,这样就可以同时处理几个要求了。。。

      实际上,python在执行多线程的时候,是通过GIL锁,进行上下文切换线程执行,每次真实只有一个线程在运行。所以上边才说,没有真的实现多现程。

2、并行与并发的区别

无论是并行还是并发,在用户看来都是同时运行的,不管是进程还是线程,都只是一个任务而已,
真正干活的是CPU,CPU来做这些任务,而一个cpu(单核)同一时刻只能执行一个任务。
并行:多个任务同时运行,只有具备多个cpu才能实现并行,含有几个cpu,也就意味着在同一时刻可以执行几个任务。
并发:是伪并行,即看起来是同时运行的,实际上是单个CPU在多道程序之间来回的进行切换。

      那么python的多线程就没有什么用了吗?

3、同步与异步的概念

同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进行处理,这样可以提高执行的效率。
打电话的过程就是同步通信,发短信时就是异步通信。

              不是这个样子的,python多线程一般用于IO密集型的程序,那么什么叫做IO密集型呢,举个例子,比如说带有阻塞的。当前线程阻塞等待其它线程执行。

4、进程创建的方式

用户创建出来的所有进程都是由操作系统负责的,因此无论是哪一种创建进程的方式,实际上都是调用操作系统的接口创建的,进程的切换都是由操作系统控制的。
无论哪一种创建进程的方式,新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的。

      即然说到适合python多线程的,那么什么样的不适合用python多线程呢?

5、父进程和子进程之间的关系

子进程创建后,父进程和子进程有各自不同的地址空间,多道技术要求物理层面实现进程之间内存的
隔离,任何一个进程在其地址空间的修改都不会影响到另外一个进程。
注意:子进程和父进程之间是可以有只读的共享的内存区域的。
进程与进程之间数据(资源)是隔离的,两个进程之间可以基于管道这种方式进行通信。在Unix当中,是含有进程层次的概念的,但是在windows当中,是没有进程层次的概念的,所有的进程都是地位相同的。
在Linux当中,每启动一个命令,都会启动一个进程。

              答案是CPU密集型的,那么什么样的是CPU密集型的呢?百度一下你就知道。

6、线程的概念

一个进程里面至少有一个控制线程,进程的概念只是一种抽象的概念,真正在CPU上面调度的是进程
里面的线程,就好比真正在地铁这个进程里面工作的实际上是地铁里面的线程,北京地铁里面至少要有
一个线程,线程是真正干活的,线程用的是进程里面包含的一堆资源,线程仅仅是一个调度单位,不包含资源。

      

7、 什么时候需要开启多个线程?

什么时候需要开启多个线程:一个进程里面的多个线程共享这个进程里面的资源,因此如果多个任务共享同一块资源的时候,需要开启多个线程。
多线程指的是,在一个进程中开启多个线程,简单的说:如果多个任务共用同一个资源空间,那么必须在一个进程内开启多个线程。

       现在有这样一项任务:需要从200W个url中获取数据?

8、一个进程里面需要包含多个线程?

一个进程这个任务里面可能对应多个分任务,如果一个进程里面只开启一个线程的话,多个分任务之间实际上是串行的执行效果,即一个程序里面只含有一条执行路径。

       那么我们真心不能用多线程,上下文切换是需要时间的,数据量太大,无法接受。这里我们就要用到多进程+协程

9、多线程和多进程的关系

对于计算密集型应用,应该使用多进程;对于IO密集型应用,应该使用多线程。
线程的创建比进程的创建开销小的多。

'''
about what
'''
import multiprocessing

import time


def func(arg):
    pname = multiprocessing.current_process().name
    pid = multiprocessing.current_process().pid
    print("当前进程ID=%d,name=%s" % (pid, pname))

    for i in range(5):
        print(arg)
        time.sleep(1)

if __name__ == "__main__":
    pname = multiprocessing.current_process().name
    pid = multiprocessing.current_process().pid
    print("当前进程ID=%d,name=%s" % (pid, pname))

    p = multiprocessing.Process(target=func, args=("hello",))
    # p = multiprocessing.Process(target=func,name="劳资的队伍",args=("hello",))
    p.daemon = True  # 设为【守护进程】(随主进程的结束而结束)
    p.start()

    while True:
        print("子进程是否活着?", p.is_alive())
        time.sleep(1)

    print("main over")

      那么什么是协程呢?

协程

协程,又称微线程,纤程。英文名Coroutine。

      协程,又称微线程,纤程。英文名Coroutine。

协程是啥 ??

首先我们得知道协程是啥?协程其实可以认为是比线程更小的执行单元。为啥说他是一个执行单元,因为他自带CPU上下文。这样只要在合适的时机,我们可以把一个协程切换到另一个协程,只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。

通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定。

本文由美高梅游戏平台网站发布于鲜果干果,转载请注明出处:python多进度与协程

关键词:

上一篇:对接口进行两次请求

下一篇:没有了

频道精选

最火资讯