草庐IT

gevent-socketio

全部标签

python - 如何避免使用 gevent 在 python 中阻塞代码?

我正在玩弄gevent,我试图了解为什么我的代码会阻塞以及如何修复它。我有一个greenlet池,每个greenlet都与一个从远程thrift服务器收集数据的thrift客户端通信。出于练习的目的,thrift服务器总是花费>1s来返回任何数据。当我生成greenlet并运行join时,它们不会全部并行执行,而是一个接一个地执行。我的理解是发生这种情况是因为我的代码是“阻塞的”,因为当我运行monkey.patch_all()时,所有的greenlet神奇地并行运行。那么我如何让代码自己非阻塞而不是让猴子修补所有东西而不理解它在做什么?这里有一个我不明白的例子:importtimef

python - Eventlet vs Greenlet vs gevent?

我正在尝试创建一个具有事件循环的GUI框架。一些线程处理UI,一些线程处理事件。我搜索了一下,找到了这三个库,我想知道哪个更好用?有什么优点和缺点?我可以使用这三个库中的一个,甚至可以使用pythonthreads或concurrent库为自己创建一些东西。我很乐意分享任何类型的经验、基准和比较。 最佳答案 您绝对不需要为此目的使用greenlet,因为它是一个低级库,您可以在其上创建轻线程库(如Eventlet和Gevent)。Eventlet、Gevent和更多类似的库为IO绑定(bind)任务(等待文件、网络上的读/写)提供了

python - 监控作业中的gevent异常

我正在使用gevent构建应用程序。我的应用程序现在变得相当大,因为有很多工作正在产生和销毁。现在我注意到,当其中一个作业崩溃时,我的整个应用程序都会继续运行(如果异常来自非主greenlet),这很好。但问题是我必须查看我的控制台才能看到错误。所以我的应用程序的某些部分可能会“死亡”,我不会立即意识到这一点,但应用程序会继续运行。用trycatch东西抖动我的应用程序似乎不是一个干净的解决方案。也许是一个自定义的spawn函数,它会做一些错误报告?监控geventjobs/greenlets的正确方法是什么?捕捉异常?在我的例子中,我监听了几个不同来源的事件,我应该处理每个不同的来源

python - 在 gevent 中,如何转储所有正在运行的 greenlet 的堆栈跟踪?

出于调试目的,我想遍历所有greenlet并获取它们的踪迹——我如何使用gevent做到这一点?基本上,我想做相当于this的gevent. 最佳答案 您可以使用gc模块遍历堆上的所有对象并搜索greenlet。Greenlets将堆栈跟踪存储为属性gr_frame。importgcimporttracebackfromgreenletimportgreenletforobingc.get_objects():ifnotisinstance(ob,greenlet):continueifnotob:continuelog.error

python - 使用 gevent 运行网络应用程序

我想尝试使用gevent作为Web服务器和应用程序框架。我看不出有什么方法可以在不终止并再次启动整个python应用程序的情况下“重新启动”服务器或更新应用程序代码。这就是它的完成方式吗?也许这只是我理解与apache方式不同的范例的问题。此外,作为一个半相关的问题,通过gevent运行网络服务器和站点/服务本身是否是个好主意。我已经看到其他实现使用gunicorn作为服务器,使用gevent作为应用程序,但从我看到的基准测试来看,在扩展方面,gevent作为服务器远远优于gunicorn。 最佳答案 Gunicorn有3个geve

python - 将 SQLalchemy 与 gevent 一起使用是否安全?

我知道一些数据库驱动程序和其他提供外部服务连接的库与基于协程的网络库不兼容。但是,我无法确定SQLAlchemy是否可以安全地与此类库(即gevent)一起使用,以及是否应应用任何变通方法来排除可能的错误。你能告诉我这个或者给我指点一篇我可以阅读这些信息的文章吗?如果提供的答案还包含对为什么可以或为什么不可以的机制的解释,则需要额外的“谢谢”。:-) 最佳答案 您是否尝试搜索geventgooglegroupforSQLAlchemy?我发现了这份使用SQLAlchemy+mysql-connector的报告成功地使用SQLAlch

python - 我如何检测 Gevent 的猴子修补是否处于事件状态?

我有一个依赖于multiprocessing的Python单元测试,因此当Gevent的猴子修补处于事件状态时不得运行。是否有Python语句可以告诉我gevent.monkey.patch_all是否已运行? 最佳答案 我不确定是否有惯用的方法,但一个简单的方法是检查socket.socket类:importgevent.monkey,gevent.socketgevent.monkey.patch_all()importsocketifsocket.socketisgevent.socket.socket:print"geven

python - 如何使用 psycopg 和 gevent 合并连接?

psycopg文档状态:“Psycopg连接不是绿色线程安全的,不能由不同的绿色线程同时使用。尝试在每个线程使用一个游标同时执行多个命令将导致错误(或2.4.2之前的版本死锁)。因此,建议程序员要么避免在协程之间共享连接,要么使用库友好的锁来同步共享连接,例如用于汇集。”我找不到绿色线程安全的池实现-有吗? 最佳答案 我假设你知道gevent-psycopg2模块,它使psycopg对greenlet友好。寻找连接池解决方案我已经尝试了2种解决方案:SQLALchemy-它似乎可以与monkey-patched线程和gevent-p

node.js - SocketIo 和 Redis 多重发射处理

我正在尝试创建一个通知系统来存储和向用户显示实时通知,但我似乎无法弄清楚如何使用我当前的Socket-Io为单个用户存储和显示多个通知和Redis设置。我无法实现这一目标的部分原因可能是我缺乏使用Redis和Pub/Sub功能的经验,但我不确定是否需要调整SocketIo和Redis存储关系或者这是通常在这些模块之外使用数组之类的东西处理的东西。这是我的服务器端代码:varredisAdapter=require('socket.io-redis');vario=require("socket.io").listen(server);io.adapter(redisAdapter({h

django - Flask-socketio 实例不从外部进程发出 (Django)

你好,我正在尝试从外部python应用程序(django)发送到flask-socketIO,但不幸的是它没有发送。我已经将我的flask-socket应用程序定义如下:app.register_blueprint(views)socketio.init_app(app,message_queue='redis://127.0.0.1:6380')我的看法如下:fromflaskimportrender_templatefrom..importsocketiofromAppimportsocketiofromApp.viewsimportviewsfromflask_socketioi