iis服务器助手广告广告
返回顶部
  • 625
分享到

协程

协程 2023-01-30 23:01:20 625人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

协程的特点是利用任务的阻塞时间去处理其他任务 处理任务的是线程,而协程是单线程,占用资源由大到小排:多进程>多进程>协程 gevent模块封装greenlet模块,greenlet模块封装yield 在gevent里使用tie

协程的特点是利用任务的阻塞时间去处理其他任务

处理任务的是线程,而协程是单线程,占用资源由大到小排:多进程>多进程>协程

gevent模块封装greenlet模块,greenlet模块封装yield

在gevent里使用tiem.sleep会失效,需要使用gevent.sleep,或者使用monkey补丁实现替换

如代码因为monkey.patch_all()补丁问题报错,将from gevent import monkey和补丁代码放到最前面尝试

 

使用协程完成多任务三个例子:

使用yield实现

import time


def func1():
    while True:
        print("---1---")
        time.sleep(0.1)
        yield


def func2():
    while True:
        print("---2---")
        time.sleep(0.1)
        yield


def main():

    t1 = func1()
    t2 = func2()

    while True:
        next(t1)
        next(t2)


if __name__ == "__main__":
    main()

 

使用greenlet实现

import time
from greenlet import greenlet


def func1():
    while True:
        print("---1---")
        gr2.switch()
        time.sleep(0.1)


def func2():
    while True:
        print("---2---")
        gr1.switch()
        time.sleep(0.1)


gr1 = greenlet(func1)
gr2 = greenlet(func2)

# 切换到gr1中运行
gr1.switch()

 

使用gevent实现

import time
import gevent
from gevent import monkey

# 打补丁,检查所有耗时操作中存在time.sleep(),自动替换为gevent.sleep()
monkey.patch_all()


def func1(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        time.sleep(0.5)  # 如未打补丁monkey,time的延时没有效果
        # gevent.sleep(0.5)


def func2(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        time.sleep(0.5)  # 如未打补丁monkey,time的延时没有效果
        # gevent.sleep(0.5)


def func3(n):
    for i in range(n):
        print(gevent.getcurrent(), i)
        time.sleep(0.5)  # 如未打补丁monkey,time的延时没有效果
        # gevent.sleep(0.5)


print("---1---")
g1 = gevent.spawn(func1, 5)
print("---2---")
g2 = gevent.spawn(func2, 5)
print("---3---")
g3 = gevent.spawn(func3, 5)
print("---4---")

# 协程的最大特点就是利用某个任务阻塞的时间去处理其他任务
# 等待执行
gevent.joinall([
    gevent.spawn(func1, 5),
    gevent.spawn(func2, 5),
    gevent.spawn(func3, 5)
])

# g1.join()
# g2.join()
# g3.join()

 

--结束END--

本文标题: 协程

本文链接: https://www.lsjlt.com/news/181145.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python协程与golang协程的区
    进程、线程和协程 进程的定义: 进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。 线程的定义: 操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 进程...
    99+
    2023-01-31
    python golang
  • 协程
    协程的特点是利用任务的阻塞时间去处理其他任务 处理任务的是线程,而协程是单线程,占用资源由大到小排:多进程>多进程>协程 gevent模块封装greenlet模块,greenlet模块封装yield 在gevent里使用tie...
    99+
    2023-01-30
    协程
  • 【kotlin 协程】万字协程 一篇完成kotlin 协程进阶
    kotlin 协程进阶 协程简介一、协程的基本使用1.1、runBlocking 启动1.2、GlobalScope.launch 启动1.3、GlobalScope.async 启动1.4、...
    99+
    2023-10-05
    kotlin android 开发语言
  • Python 协程与 JavaScript 协程的对比
    目录1、前言2、什么是协程?3、混乱的历史3.1Python协程的进化4、JavaScript协程的进化5、Python协程成熟体5.1协程(coroutine)5.2任务(Task...
    99+
    2024-04-02
  • Android协程
    协程 文章目录 协程1.讲协程之前的一些相关概念1.并发与并行2.同步与异步3.阻塞3.1Looper的阻塞3.1.1 loop的源码3.1.2loopOnce源码3.1.3注意 3....
    99+
    2023-10-05
    android 开发语言 kotlin handler ui
  • python协程
    目录 python协程入门 函数的执行顺序 协程概念 总结 python协程入门 函...
    99+
    2023-01-30
    python 协程
  • python 协程
    进程和线程都会的切换都要消耗时间,保存线程进程当前状态以便下次继续执行。在不怎么需要cpu的程序中,即相对于IO密集型的程序,协程相对于线程进程资源消耗更小,切换更快,更适用于IO密集型。协程也是单线程的,没法利用cpu的多核,想利用cp...
    99+
    2023-01-30
    python 协程
  • python线程、协程
    线程Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。更多方法:start            线程准备就绪,等待CPU调度setName      为线程设置名称getName      获取线程名称setDae...
    99+
    2023-01-31
    线程 python 协程
  • kotlin语法进阶 - 协程(一)协程基础
    一. kotlin协程的理解 协程并不是一个新的概念,而是一个非常老的概念,很多语言都支持协程,建议去浏览器去了解一下协程的历史和基本概念,这里我们只讲一下kotlin中的协程的作用。 从代码实现角度...
    99+
    2023-09-09
    kotlin android android studio
  • swoole协程和go协程有哪些区别
    这篇文章主要讲解了“swoole协程和go协程有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“swoole协程和go协程有哪些区别”吧!区别:1、go协程是基于多线程的,可以利用多核...
    99+
    2023-06-29
  • python之协程
      协程,又称微线程,纤程。英文名Coroutine。协程是一种用户态的轻量级线程。  所谓用户态就是说协程是由用户来控制的,CPU不认识协程,协程是跑在线程中的。  协程拥有自己的寄存器上下文栈。协程调试切换时,将寄存器上下文栈保存到其他...
    99+
    2023-01-31
    python
  • Python进程/线程/协程
    第1章 操作系统历史1.1为什么要有操作系统?程序员无法把所有的硬件操作细节全部了解到,管理这些硬件并且加以优化使用时非常繁琐的工作,这个繁琐的工作就是由操作系统来干的,有了它,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件...
    99+
    2023-01-31
    线程 进程 Python
  • golang协程关闭
    在Go语言中,协程是一种重要的并发编程机制。它可以让多个任务并行执行,从而提高程序的效率。Go语言的协程实现是基于轻量级线程(或者说是用户级线程)的,因此创建和销毁协程的代价很小。但是,在实际开发中,我们有时候需要关闭正在运行的协程,这时就...
    99+
    2023-05-14
  • Golang协程与 asyncio
    golang 协程和 python asyncio 都是并发编程工具。协程是轻量级线程,在同一线程并发运行;asyncio 使用事件循环处理 i/o 事件。golang 协程语法简洁,性...
    99+
    2024-04-15
    golang asyncio python
  • Java协程编程之Loom
    目录Java协程编程Loom1、Loom项目简单介绍2、Virtual Thread使用Java协程编程Loom 前提: OpenJDK给出的官网https://openjdk....
    99+
    2024-04-02
  • Python下的协程
    线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代...
    99+
    2023-01-31
    Python
  • golang协程区别
    Go语言是近年来备受关注的一门编程语言。其特有的并发编程方式和协程机制被广泛应用在Web开发、系统编程、网络通讯等领域。在Go语言中,协程是一种轻量级的线程,由Go语言运行时管理,可以在程序中并发执行任务。在Go语言中,协程是“go”关键字...
    99+
    2023-05-15
  • Python协程之Gevent
    协程,又称微线程,即为轻量级的线程。python中实现协程是基于Gevent模块,Gevent模块内部封装了greenlet模块;greenlet模块实现了在单线程中切换状态,Gevent模块在此之上还实现了遇到I/O操作自动切换,使程序运...
    99+
    2023-01-31
    Python Gevent
  • Unity3D 协程 浅谈
    理解:协程不是线程,也不是异步执行(知道就行)。1.协程和MonoBehaviour的Update函数一样,也是在MainThread中执行的(一定得明白这句话意思)。12345678910111213141516171819void St...
    99+
    2023-01-31
    浅谈 Unity3D 协程
  • 多任务—协程
    一、协程简介 协程 协程,又称微线程,纤程。英文名Coroutine。   协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在...
    99+
    2023-01-31
    协程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作