• 协程


    # def consumer():
    # while True:
    # x=yield
    # print('***',x)
    #
    # c = consumer()
    # next(c) #执行代码到yield停止
    # c.send(1) #发送1给生成器,执行x=1,然后print x的值
    #------------------------------------------------------------------------------
    # def consumer():
    # while True:
    # x=yield
    # print('处理了数据:',x)
    #
    # def producer():
    # c=consumer()
    # next(c)
    # for i in range(10):
    # print('生产了数据:',i)
    # c.send(i)
    #
    # producer() #在一个程序内部调用另一个程序
    #----------------------------------------------------------------------
    #真正的协程模块就是使用greenlet完成的切换

    from greenlet import greenlet
    def eat():
    print('eating start')
    g2.switch() #切换到play去执行,不会自动返回
    print('eating end')

    def play():
    print('playing start')

    g1 = greenlet(eat)
    g2 = greenlet(play)
    g1.switch()
    #-------------------------------------------------------------------------
    import gevent
    import time

    def eat():
    print('eating start')
    #time.sleep(1) gevent感知不到time.sleep
    gevent.sleep(1)
    print('eating end')

    def play():
    print('playing start')
    #time.sleep(1)
    gevent.sleep(1)
    print('playing end')

    g1 = gevent.spawn(eat)
    g2 = gevent.spawn(play)

    g1.join()
    g2.join()

    #进程 线程之间的任务切换由操作系统完成
    #协程任务之间的切换由程序完成。只有遇到协程模块认识的IO操作的时候,程序才会进行任务的切换,实现并发效果。
    #-----------------------------------------------------------------------------------------------------
    # import requests
    # from urllib.request import urlopen
    #
    # url ='http://www.baidu.com'
    # res1 = urlopen(url)
    # res2 = requests.get(url)
    #
    # print(res1.read().decode('utf-8')) #有格式的
    # print(res2.content.decode('utf-8')) #无格式的
    #---------------------------------------------------------
    # from gevent import monkey;monkey.patch_all()
    # import gevent
    # from urllib.request import urlopen
    # def get_url(url):
    # res = urlopen(url)
    # content=res.read().decode('utf-8')
    # return len(content)
    #
    # g1=gevent.spawn(get_url,'http://www.baidu.com')
    # g2=gevent.spawn(get_url,'http://www.sogou.com')
    # g3=gevent.spawn(get_url,'http://www.hao123.com')
    # g4=gevent.spawn(get_url,'http://www.taobao.com')
    # gevent.joinall([g1,g2,g3,g4])
    # print(g1.value) #value 就是调用函数的返回值。
    # print(g2.value)
    # print(g3.value)
    # print(g4.value)
    #---------------------------------------------------------------
    from gevent import monkey;monkey.patch_all()
    import socket
    import gevent

    def talk(conn):
    conn.send(b'hello')
    print(conn.recv(1024).decode('utf-8'))
    conn.close()

    sk = socket.socket()
    sk.bind(('127.0.0.1',8080))
    sk.listen()
    while True:
    conn,addr = sk.accept()
    gevent.spawn(talk,conn)

    sk.close()



  • 相关阅读:
    多机部署之定时任务完整方案
    老项目多机部署初步解决方案
    java多线程与线程池
    HotSpot项目结构
    调试HotSpot源代码
    在Ubuntu 16.04上编译OpenJDK8的源代码
    研究Java语言的编译器和虚拟机可参阅的资料
    我的书籍《深入解析Java编译器:源码剖析与实例详解》就要出版了
    hotspot编译
    研究小技巧及专业术语
  • 原文地址:https://www.cnblogs.com/liu1983/p/13628127.html
Copyright © 2020-2023  润新知