同步异步 阻塞非阻塞

同步异步描述的事任务的提交方式  描述的事一段代码或者函数

同步:任务提交后,原地等待任务的返回结果,等待的过程中不做任何事(干等)

程序层面上表现出来的感觉就是卡住了

例子:

import time

 

def func():

  time.sleep(3)

  print('hello world')

 

 

if __name++=='__main__':

  res=func() 

  print('hahaha')

异步:任务提交后,不原地等待任务的返回结果,直接去做其他事情

我提交的任务结果如何获取?

任务的返回结果有一个异步回调机制自动处理

 

阻塞非阻塞:描述的程序的运行状态

阻塞:阻塞态

非阻塞:就绪态、运行态

理想状态:我们应该让我们的写的代码永远处于就绪态和运行态之间切换

上述概念的组合:最高效的一种组合就是异步非阻塞

 

 

如何创建进程:

第一种:用这种的比较多

from multiprocessing import Process  是一个类,里面需要传:目标(要把谁当作进程来创建

import time

 

 

def task(name):

  print('%s is running'%name)

  time.slrrp(3)

  print('%s isover 'name)

if __name__=='__main__':

#1.创建一个对象

   p=Process(target=task,srgs=('iason',))  

#容器类型 里面无论有几个元素 建议一定要用逗号隔开 哪怕只有一个元素

#2.开启进程

p.start()#告诉操作系统帮我们常见一个进程     异步

print('主')

 

第二种:

from multiprocessing import Process

import time

 

class Myprocess(Process):

  def run(self):

    print('hello')

    time.sleep(3)

    print('zhuzhu')

if __name__=='__main__':

  p=Myprocess()

  p.start()

  print('主')

 

"""

windows操作系统下 创建进程一定要在main内创建

因为Windows下创建进程类似于模块导入的方式

会从上往下依次执行代码

Linux中则是直接将代码完整的拷贝一份

所以Windows下创建类似于双开一定要在 __name__=='__main__':后写

"""

总结:创建进程就是在内存中申请一块内存空间  将需要运行的代码丢进去

一个进程对应在内存中就是一块独立的内存空间

多个进程对应在内存中就是多个独立的内存空间

进程与进程之间数据默认情况下是无法直接交互的,如果想交互可以借助第三方工具、模块

 

join方法:

是让主进程的代码等待子代码运行结束之后再继续运行,不影响其他子进程的执行

例如:

 

from multiprocessing import Process  是一个类,里面需要传:目标(要把谁当作进程来创建

import time

 

 

def task(name):

  print('%s is running'%name)

  time.slrrp(3)

  print('%s isover 'name)

if __name__=='__main__':

#1.创建一个对象

  p=Process(target=task,srgs=('iason',))  

  p.start()#告诉操作系统帮我们创建一个进程     异步

  p.join()

  print('主')

 

posted @ 2023-09-14 16:37  朱饱饱  阅读(18)  评论(0)    收藏  举报