博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
九.协程
阅读量:6892 次
发布时间:2019-06-27

本文共 1602 字,大约阅读时间需要 5 分钟。

 

Greenlet

greenlet是一个用C实现的协程模块,相比与python自带的yield,它可以使你在任意函数之间随意切换,而不需把这个函数先声明为generator

from greenlet import greenletdef 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 

Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。

import geventdef foo():    print('Running in foo')    gevent.sleep(2)    print('Running in foo2')def bar(): print('running bar') gevent.sleep(1) print('running bar2') def func3(): print("running func3 ") gevent.sleep(0) print("running func3 again ")

 

通过gevent实现单线程下的多socket并发

#server side import sysimport socketimport timeimport geventfrom gevent import socket,monkeymonkey.patch_all()def server(port): s = socket.socket() s.bind(('0.0.0.0', port)) s.listen(500) while True: cli, addr = s.accept() gevent.spawn(handle_request, cli) def handle_request(conn): try: while True: data = conn.recv(1024) print("recv:", data) conn.send(data) if not data: conn.shutdown(socket.SHUT_WR) except Exception as ex: print(ex) finally: conn.close() if __name__ == '__main__': server(8001)
#client side   import socketHOST = 'localhost'    # The remote hostPORT = 8001           # The same port as used by the servers = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((HOST, PORT))while True:    msg = bytes(input(">>:"),encoding="utf8")    s.sendall(msg)    data = s.recv(1024) #print(data) print('Received', repr(data)) s.close()

 

转载于:https://www.cnblogs.com/hiss/p/8470417.html

你可能感兴趣的文章
java 合并pdf
查看>>
使用vue实现grid-layout功能
查看>>
DPR
查看>>
Item 11 Override clone judiciously
查看>>
程序员过关斩将--请不要随便修改基类
查看>>
Golang 并发,有缓存通道,通道同步案例演示
查看>>
一件事件
查看>>
设计模式学习专栏五--------命令模式
查看>>
webpack 持久化缓存
查看>>
WebRTC 入门教程(二)|WebRTC信令控制与STUN/TURN服务器搭建
查看>>
前端成长DAY.1 Html+CSS
查看>>
mysql rownum in hibernate
查看>>
Redux源码完全解读
查看>>
wordpress主题制作教程(12):单页面模板page.php
查看>>
Android 使用RecyclerView实现轮播图
查看>>
表单的checkbox switch开关设计
查看>>
centos7用yum安装nodejs
查看>>
华为2013内部推荐岗位,欢迎符合条件的童鞋投递
查看>>
JDBC Item5: 数据库连接池
查看>>
我的友情链接
查看>>