返回顶部
首页 > 资讯 > 后端开发 > Python >Python下的协程
  • 118
分享到

Python下的协程

Python 2023-01-31 01:01:02 118人浏览 安东尼

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

摘要

线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代

线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员

协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。

协程的适用场景:当程序中存在大量不需要CPU的操作时(io),适用于协程;

greenlet

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
 
from greenlet import greenlet
 
 
def test1():
    print 12
    gr2.switch()
    print 34
    gr2.switch()
 
 
def test2():
    print 56
    gr1.switch()
    print 78
 
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()


gevent

import gevent
 
def foo():
    print('Running in foo')
    gevent.sleep(0)
    print('Explicit context switch to foo again')
 
def bar():
    print('Explicit context to bar')
    gevent.sleep(0)
    print('Implicit context switch back to bar')
 
gevent.joinall([
    gevent.spawn(foo),
    gevent.spawn(bar),
])

遇到IO操作自动切换:

from gevent import monkey; monkey.patch_all()
import gevent
import urllib2
def f(url):
    print('GET: %s' % url)
    resp = urllib2.urlopen(url)
    data = resp.read()
    print('%d bytes received from %s.' % (len(data), url))
gevent.joinall([
        gevent.spawn(f, 'https://www.Python.org/'),
        gevent.spawn(f, 'Https://www.yahoo.com/'),
        gevent.spawn(f, 'https://GitHub.com/'),
])



转载于:http://www.cnblogs.com/wupeiqi/articles/5040827.html




--结束END--

本文标题: Python下的协程

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

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

猜你喜欢
  • Python下的协程
    线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代...
    99+
    2023-01-31
    Python
  • Python协程中使用上下文
    在Python 3.7中,asyncio 协程加入了对上下文的支持。使用上下文就可以在一些场景下隐式地传递变量,比如数据库连接session等,而不需要在所有方法调用显示地传递这些变量。使用得当的话,可以提高接口的可读性和扩展性。 协和...
    99+
    2023-01-30
    上下文 Python 协程中
  • python协程与golang协程的区
    进程、线程和协程 进程的定义: 进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。 线程的定义: 操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 进程...
    99+
    2023-01-31
    python golang
  • Python 协程与 JavaScript 协程的对比
    目录1、前言2、什么是协程?3、混乱的历史3.1Python协程的进化4、JavaScript协程的进化5、Python协程成熟体5.1协程(coroutine)5.2任务(Task...
    99+
    2024-04-02
  • python协程
    目录 python协程入门 函数的执行顺序 协程概念 总结 python协程入门 函...
    99+
    2023-01-30
    python 协程
  • python 协程
    进程和线程都会的切换都要消耗时间,保存线程进程当前状态以便下次继续执行。在不怎么需要cpu的程序中,即相对于IO密集型的程序,协程相对于线程进程资源消耗更小,切换更快,更适用于IO密集型。协程也是单线程的,没法利用cpu的多核,想利用cp...
    99+
    2023-01-30
    python 协程
  • Linux下协程与异步任务的协调
    在Linux下,协程与异步任务之间的协调可以通过多种方式实现。以下是一些常见的方法: 使用事件循环:可以使用事件循环来管理协程和异步任务之间的调度。可以使用类似于libuv的库来实现事件循环,然后将协程和异步任务注册到事件循环中,根据事...
    99+
    2024-08-06
    linux
  • Linux下协程与协程间通信机制
    在Linux环境中,协程与协程之间的通信可以通过共享内存、管道、消息队列等机制进行。以下是一些常用的通信机制: 共享内存:可以通过共享内存来实现协程之间的通信。在Linux下,可以使用mmap()系统调用来创建共享内存区域,然后通过该共...
    99+
    2024-08-06
    linux
  • python线程、协程
    线程Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。更多方法:start            线程准备就绪,等待CPU调度setName      为线程设置名称getName      获取线程名称setDae...
    99+
    2023-01-31
    线程 python 协程
  • python之协程
      协程,又称微线程,纤程。英文名Coroutine。协程是一种用户态的轻量级线程。  所谓用户态就是说协程是由用户来控制的,CPU不认识协程,协程是跑在线程中的。  协程拥有自己的寄存器上下文栈。协程调试切换时,将寄存器上下文栈保存到其他...
    99+
    2023-01-31
    python
  • Python进程/线程/协程
    第1章 操作系统历史1.1为什么要有操作系统?程序员无法把所有的硬件操作细节全部了解到,管理这些硬件并且加以优化使用时非常繁琐的工作,这个繁琐的工作就是由操作系统来干的,有了它,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件...
    99+
    2023-01-31
    线程 进程 Python
  • Python协程之Gevent
    协程,又称微线程,即为轻量级的线程。python中实现协程是基于Gevent模块,Gevent模块内部封装了greenlet模块;greenlet模块实现了在单线程中切换状态,Gevent模块在此之上还实现了遇到I/O操作自动切换,使程序运...
    99+
    2023-01-31
    Python Gevent
  • python 中的 asyncio 异步协程
    目录一、定义协程二、运行协程三、协程回调四、运行多个协程五、run_forever六、多协程中关闭run_forever一、定义协程 asyncio 执行的任务,称为协程,但是Asy...
    99+
    2024-04-02
  • 简述Python中的进程、线程、协程
    进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由...
    99+
    2022-06-04
    线程 进程 Python
  • Python 中的进程、线程、协程、同步
    进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生?在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享《Pyt...
    99+
    2023-01-31
    线程 进程 Python
  • Linux协程的上下文切换机制
    在Linux系统中,协程的上下文切换是通过使用setjmp和longjmp函数实现的。 setjmp函数用于保存当前函数的执行环境,并返回0;longjmp函数用于恢复之前保存的执行环境,并返回到setjmp函数的调用点。这样可以实现协...
    99+
    2024-08-06
    linux
  • golang的协程上下文的具体使用
    go协程上下文context golang的context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等 context是gol...
    99+
    2024-04-02
  • 浅谈Python协程asyncio
    一、协程 官方描述; 协程是子例程的更一般形式。 子例程可以在某一点进入并在另一点退出。 协程则可以在许多不同的点上进入、退出和恢复。 它们可通过 async def 语句来实现。...
    99+
    2024-04-02
  • python协程--asyncio模块(
    在高并发的场景下,python提供了一个多线程的模块threading,但似乎这个模块并不近人如意,原因在于cpython本身的全局解析锁(GIL)问题,在一段时间片内实际上的执行是单线程的。同时还存在着资源争夺的问题。python3.4...
    99+
    2023-01-30
    模块 python 协程
  • python并发之协程
    概念 协程,又称微线程。英文名Coroutine。 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程...
    99+
    2023-01-31
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作