问题标签 [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.

0 投票
2 回答
362 浏览

python - 使用 pycharm + gevent greenlet.join() 不再阻塞

所以在通过pycharm运行时将gevent升级到1.1rc4(从1.0.2)后,我无法让greenlets正确加入......以这段代码为例:

将输出:

在 IDE 中,它使用 CLI 中的相同解释器正常执行

我遵循了 cli 和 gui 中的代码,并且由于以下行为greenlet.join()的变化而导致行为有所不同hub.switch()

在执行greenlet之前,最后一行将立即返回... pycharm调试器不会让我进入该代码...

任何帮助都会很棒......协程流控制在工作时已经够难了......

0 投票
0 回答
774 浏览

python - 如何在烧瓶中使用 grequests?

我正在尝试gunicorn使用gevent工人和Flask. 在视图函数中,我需要向 url 发出 GET 请求。以前,我使用requests库来做到这一点。但是由于我想使用 gevent 工作者,我相信我必须使其异步,所以我使用grequests库。

这是我的代码:

这是使用 grequests 的正确方法吗,因为我使用了阻塞job.get()?我想利用我遇到的问题是 IO 绑定的事实。

0 投票
2 回答
1058 浏览

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'(请求延迟发送)

请注意,第一个响应似乎在下一个请求应该发送但没有发送很久之后到达。为什么在第一个响应到达之前睡眠没有返回,并且下一个请求被发送?

0 投票
1 回答
1181 浏览

python - 如何使用 mock 在 greenlet 中进行测试?

我在 python (2.7.6) 应用程序中使用了 bottle & gevent。

我想用 mongomock ( https://github.com/vmalloc/mongomock ) 测试它。

我的测试失败了。

如果我在没有 spawn 的情况下使用 self.insert_event 就可以了。我尝试使用patch.object,“with”语句,但没有成功......

0 投票
1 回答
3720 浏览

python - 为什么 python gevent.joinall 执行所有greenlets

我有以下 Python 代码:

如上所示,threads[0].valuefooFn. 这意味着threads[0]greenlet被执行了。

为什么当我只通过threads[1]greenlet时会发生这种情况gevent.joinall

我怎样才能确保只执行那些实际传递给的greenlets gevent.joinall

0 投票
0 回答
558 浏览

python - Python 库中的协程总是单线程的吗?

gevent文档:

greenlet 都在同一个 OS 线程中运行,并且是协同调度的。

来自asyncio文档:

该模块提供了使用协程编写单线程并发代码的基础设施。asyncio确实提供

尽我所能,我没有遇到任何实现多线程或多进程协同程序的主要 Python 库,即跨多个线程传播协同程序以增加可以建立的 I/O 连接的数量。

我理解协程本质上允许主线程暂停执行这一个 I/O 绑定任务并继续执行下一个 I/O 绑定任务,仅当其中一个 I/O 操作完成并需要处理时才强制中断。如果是这种情况,那么将 I/O 任务分布在多个线程上,每个线程都可以在不同的内核上运行,显然应该会增加您可以发出的请求数量。

也许我误解了协程是如何工作的或者是如何工作的,所以我的问题分为两部分:

  1. 是否有可能拥有一个在多个线程(可能在不同的内核上)或多个进程上运行的协程库?

  2. 如果有,这样的图书馆吗?

0 投票
1 回答
23492 浏览

python - Eventlet vs Greenlet vs gevent?

我正在尝试创建一个具有事件循环的 GUI 框架。一些线程处理 UI 和一些事件处理。我搜索了一下,找到了这三个库,我想知道哪个更好用?优缺点都有什么?

我可以使用这三个库之一,甚至可以使用 python线程并发库为自己创建一些东西。

我将不胜感激分享任何类型的经验、基准和比较。

0 投票
1 回答
946 浏览

python - 具有无限循环的 Gevent 任务似乎也阻塞了所有其他任务

我对 Gevent/Greenlet 很陌生,并且已经完成了教程。我想为每个注册团队运行一个机器人。

有趣的是,如果我不使用while true循环,我会bot_id在控制台中显示两个机器人。

但是一旦我使用无限循环,我只能看到一个机器人的 id 被显示。似乎另一个任务正在等待这个任务完成,这是没有意义的。我认为这gevent.joinall将同时运行。

请问有什么建议吗?

更新

作为记录,我必须gevent.sleep(0.1)在 while 循环的最后一行添加才能完成这项工作。

0 投票
1 回答
271 浏览

profiling - 是否有一些常用技术来分析基于协程的代码?

如何可视化常规调用堆栈并计算内部和外部执行时间非常明显。但是,如果处理过协程,调用堆栈可能看起来很混乱。我的意思是,协程可能不会将执行交给它的父级,而是交给另一个协同程序(例如greenlet)。是否有一些常用方法可以为此类场景提供一致的分析输出?

0 投票
0 回答
470 浏览

python - 通过 id 杀死一个 Python Greenlet

Greenlet.spawn按照文档中的定义创建一个新的 Greenlet 实例。我有下面的代码,我希望能够通过它的 id 杀死一个 Greenlet。

我感谢您的帮助。