问题标签 [greenlets]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用 pycharm + gevent greenlet.join() 不再阻塞
所以在通过pycharm运行时将gevent升级到1.1rc4(从1.0.2)后,我无法让greenlets正确加入......以这段代码为例:
将输出:
在 IDE 中,它使用 CLI 中的相同解释器正常执行
我遵循了 cli 和 gui 中的代码,并且由于以下行为greenlet.join()
的变化而导致行为有所不同hub.switch()
:
在执行greenlet之前,最后一行将立即返回... pycharm调试器不会让我进入该代码...
任何帮助都会很棒......协程流控制在工作时已经够难了......
python - 如何在烧瓶中使用 grequests?
我正在尝试gunicorn
使用gevent
工人和Flask
. 在视图函数中,我需要向 url 发出 GET 请求。以前,我使用requests
库来做到这一点。但是由于我想使用 gevent 工作者,我相信我必须使其异步,所以我使用grequests
库。
这是我的代码:
这是使用 grequests 的正确方法吗,因为我使用了阻塞job.get()
?我想利用我遇到的问题是 IO 绑定的事实。
python - 通过 HTTPS 使用 gevent/grequests 的奇怪阻塞行为
以下代码每 200 毫秒发送一次请求,并且应在响应到来时异步处理它们。
通过 HTTP,它按预期工作 - 每 200 毫秒发送一次请求,并且每当响应到达时都会独立调用响应回调。然而,通过 HTTPS,只要响应到达,请求就会显着延迟(即使我的响应处理程序不起作用)。每个请求似乎都会调用响应回调两次,一次是零长度响应(编辑:这是因为重定向,并且似乎与阻塞问题无关,感谢 Padraic)。
是什么导致了 HTTPS 上的这种阻止行为?(www.bbc.co.uk
只是一个地理上离我很远的例子,但它发生在我测试过的所有服务器上)。
grequests_test.py
$ ipython2 grequests_test.py 'http://www.bbc.co.uk'
(预期结果)
ipython2 grequests_test.py 'https://www.bbc.co.uk'
(请求延迟发送)
请注意,第一个响应似乎在下一个请求应该发送但没有发送很久之后到达。为什么在第一个响应到达之前睡眠没有返回,并且下一个请求被发送?
python - 如何使用 mock 在 greenlet 中进行测试?
我在 python (2.7.6) 应用程序中使用了 bottle & gevent。
我想用 mongomock ( https://github.com/vmalloc/mongomock ) 测试它。
我的测试失败了。
如果我在没有 spawn 的情况下使用 self.insert_event 就可以了。我尝试使用patch.object,“with”语句,但没有成功......
python - 为什么 python gevent.joinall 执行所有greenlets
我有以下 Python 代码:
如上所示,threads[0].value
从fooFn
. 这意味着threads[0]
greenlet被执行了。
为什么当我只通过threads[1]
greenlet时会发生这种情况gevent.joinall
?
我怎样才能确保只执行那些实际传递给的greenlets gevent.joinall
?
python - Python 库中的协程总是单线程的吗?
从gevent
文档:
greenlet 都在同一个 OS 线程中运行,并且是协同调度的。
来自asyncio
文档:
该模块提供了使用协程编写单线程并发代码的基础设施。
asyncio
确实提供
尽我所能,我没有遇到任何实现多线程或多进程协同程序的主要 Python 库,即跨多个线程传播协同程序以增加可以建立的 I/O 连接的数量。
我理解协程本质上允许主线程暂停执行这一个 I/O 绑定任务并继续执行下一个 I/O 绑定任务,仅当其中一个 I/O 操作完成并需要处理时才强制中断。如果是这种情况,那么将 I/O 任务分布在多个线程上,每个线程都可以在不同的内核上运行,显然应该会增加您可以发出的请求数量。
也许我误解了协程是如何工作的或者是如何工作的,所以我的问题分为两部分:
是否有可能拥有一个在多个线程(可能在不同的内核上)或多个进程上运行的协程库?
如果有,有这样的图书馆吗?
python - Eventlet vs Greenlet vs gevent?
我正在尝试创建一个具有事件循环的 GUI 框架。一些线程处理 UI 和一些事件处理。我搜索了一下,找到了这三个库,我想知道哪个更好用?优缺点都有什么?
我可以使用这三个库之一,甚至可以使用 python线程或并发库为自己创建一些东西。
我将不胜感激分享任何类型的经验、基准和比较。
python - 具有无限循环的 Gevent 任务似乎也阻塞了所有其他任务
我对 Gevent/Greenlet 很陌生,并且已经完成了教程。我想为每个注册团队运行一个机器人。
有趣的是,如果我不使用while true
循环,我会bot_id
在控制台中显示两个机器人。
但是一旦我使用无限循环,我只能看到一个机器人的 id 被显示。似乎另一个任务正在等待这个任务完成,这是没有意义的。我认为这gevent.joinall
将同时运行。
请问有什么建议吗?
更新
作为记录,我必须gevent.sleep(0.1)
在 while 循环的最后一行添加才能完成这项工作。
profiling - 是否有一些常用技术来分析基于协程的代码?
如何可视化常规调用堆栈并计算内部和外部执行时间非常明显。但是,如果处理过协程,调用堆栈可能看起来很混乱。我的意思是,协程可能不会将执行交给它的父级,而是交给另一个协同程序(例如greenlet)。是否有一些常用方法可以为此类场景提供一致的分析输出?
python - 通过 id 杀死一个 Python Greenlet
Greenlet.spawn
按照文档中的定义创建一个新的 Greenlet 实例。我有下面的代码,我希望能够通过它的 id 杀死一个 Greenlet。
我感谢您的帮助。