zoukankan      html  css  js  c++  java
  • python 协程

    协程之yield

    #coding=utf-8
    import time
    def A():
            while True:
                    print('---A---')
                    yield 
                    time.sleep(0.5)
    
    def B(c):
            while True:
                    print('---B---')
                    next(c)
                    time.sleep(0.5)
    if __name__ == '__main__':
            a=A()
            B(a)
    [chaoge@localhost mypython]$ python3 coroutine01.py
    ---B---
    ---A---
    ---B---
    ---A---
    ---B---
    ---A---

    协程之greenlet

    #安装greenlet:pip3 install greenlet
    #coding=utf-8
    from greenlet import greenlet
    import time
    
    def coroutine1():
            while True:
                    print('---A---')
                    gr2.switch()
                    time.sleep(0.5)
    
    def coroutine2():
            while True:
                    print('---B---')
                    gr1.switch()
                    time.sleep(0.5)
    
    
    gr1 = greenlet(coroutine1)
    gr2 = greenlet(coroutine2)
    
    
    gr1.switch()
    [chaoge@localhost mypython]$ python3 greenlet01.py
    ---A---
    ---B---
    ---A---
    ---B---
    ---A---
    ---B---
    ---A---
    ---B---
    ---A---

    协程之gevent

    #coding=utf-8
    #安装:pip3 install gevent
    import gevent
    def f(n):
            for i in range(n):
                    print(gevent.getcurrent(),i)
                    #遇到耗时操作,自动切换
                    gevent.sleep(1)
    
    g1 = gevent.spawn(f,5)
    g2 = gevent.spawn(f,5)
    g3 = gevent.spawn(f,5)
    
    g1.join()
    g2.join()
    g3.join()
    [chaoge@localhost mypython]$ python3 gevent01.py 
    <Greenlet at 0x7f43ce24fc28: f(5)> 0
    <Greenlet at 0x7f43c6f59930: f(5)> 0
    <Greenlet at 0x7f43c6f599c8: f(5)> 0
    <Greenlet at 0x7f43ce24fc28: f(5)> 1
    <Greenlet at 0x7f43c6f59930: f(5)> 1
    <Greenlet at 0x7f43c6f599c8: f(5)> 1
    <Greenlet at 0x7f43ce24fc28: f(5)> 2
    <Greenlet at 0x7f43c6f59930: f(5)> 2
    <Greenlet at 0x7f43c6f599c8: f(5)> 2
    <Greenlet at 0x7f43ce24fc28: f(5)> 3
    <Greenlet at 0x7f43c6f59930: f(5)> 3
    <Greenlet at 0x7f43c6f599c8: f(5)> 3
    <Greenlet at 0x7f43ce24fc28: f(5)> 4
    <Greenlet at 0x7f43c6f59930: f(5)> 4
    <Greenlet at 0x7f43c6f599c8: f(5)> 4


    gevent版-TCP并发服务器

    #coding=utf-8
    #gevent版-TCP并发服务器
    import sys
    import time
    import gevent
    #导入gevent中的socket
    from gevent import socket,monkey
    
    #打补丁
    monkey.patch_all()
    
    def handle_request(conn):
    	while True:
    		#等待客户端发送数据(阻塞,即为耗时操作),自动切换到另一个协程
    		data = conn.recv(1024)
    		if not data:
    			conn.close
    			break
    		print("recv:",data)
    		conn.send(data)
    
    def server(port):
    	s = socket.socket()
    	s.bind(("",port))			
    	s.listen(5)
    	while True:
    		#等待客户端连接
    		cli,addr = s.accept()
    		#创建一个协程
    		gevent.spawn(handle_request,cli)
    
    if __name__ == '__main__':
    	server(7788)		
    [chaoge@localhost mypython]$ python3 gevent02.py       
    recv: b'hello'
    recv: b'hello'
    recv: b'hello'

  • 相关阅读:
    docker 镜像导入导出[转]
    部署coredns
    构建docker私有库
    怎么安装Docker CE 17( Centos 7)
    [转]使用tcpdump抓取HTTP包
    VLOOKUP函数使用
    有趣:256个class选择器可以干掉1个id选择器——张鑫旭
    算警示吧——此文来自张鑫旭(说说CSS学习中的瓶颈)
    不使用JavaScript让IE浏览器支持HTML5元素——张鑫旭
    CSS中width和height与盒子模型的关系
  • 原文地址:https://www.cnblogs.com/fonyer/p/8871450.html
Copyright © 2011-2022 走看看