问题标签 [uvloop]
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-asyncio - 使用替代事件循环而不设置全局策略
我正在uvloop
使用websockets
as
它工作正常,我只是想知道如果不将全局asyncio
策略设置为uvloop
. 据我了解,不设置全局策略应该可以工作,只要那里没有任何东西不使用全局asyncio
方法,而是直接与传递的事件循环一起工作。那是对的吗?
python - 如何使用 httptools 从请求中获取正文?
如何content-type: Application/json
使用 python httptools获取请求正文?我将它与 uvloop 一起使用。
请求类如下所示:
python - aiohttp + uvloop 并行 HTTP 请求比没有 uvloop 慢
我正在编写一个脚本来并行进行数百万个 API 调用。
为此,我正在使用带有 aiohttp 的 Python 3.6。我原以为 uvloop 会让它更快,但它似乎让它变慢了。难道我做错了什么?
使用 uvloop:22 秒
没有 uvloop:15 秒
gunicorn - 如何在没有 WSGI 的情况下为 Gunicorn 配置 ExecStart?
Systemd 和 Gunicorn 需要某种 wsgi 文件作为最后一个参数ExecStart
:http ://docs.gunicorn.org/en/latest/deploy.html?highlight=ExecStart#systemd
使用 Django,这在主模块中为wsgi.py
:
但是这个文件在使用 Sanic 和 uvloop 时显然是不存在的(我相信新的协议叫做 ASGI)。我尝试用它代替它,app.py
这并不奇怪:
使用Sanic的时候这个参数应该怎么配置?
cython - 如何从 C 访问 asyncio / uvloop 循环
我对 python 完全陌生,但是有一个使用 uvloop 的异步 python 应用程序,它使用我创建的 C api 模块,它也需要访问异步循环。
1) asyncio 还没有用于此的 c-api?有什么技巧可以在 C 中使用事件循环吗?这在任何地方都在讨论吗?
2) uvloop 使用我在 C 中熟悉的 libuv。如果我能抓住 uv_loop_t 指针,我就可以挂钩到循环中。我想我可以:
A) 使用 PyObject * 到 uvloop 的循环计算到 uv_loop_t* 的偏移量并使用它?假设我知道 PyObject_HEAD 的长度?
B) 或者非 hacky 修改 uvloop 以暴露循环指针。我在这里完全一无所知,因为我从未看过 cython 代码。我可以在循环上创建一个 python 函数,从我的 C 代码中调用它并获取 C 指针吗?喜欢:
通过将 getLoop 添加到此处:
https://github.com/MagicStack/uvloop/blob/master/uvloop/loop.pyx
python - 与 uvloop 等效的异步事件循环
我有一个使用协程方法的事件循环asyncio
。
我热衷于使用uvloop寻找以下示例的等效项。
这是一个简单的asyncio
事件循环示例:
问题:
如何使用uvloop改造上述代码段?
以下更改对于使用具有更高性能的uvloop是否正确?
/li>
[注意]:
- uvloop声称这使 asyncio 速度提高了 2-4 倍。
python - 同步代码的异步性能
我创建了以下测试来检查在异步函数中运行同步代码的性能。
Inreturn_random
函数可以是诸如写入日志、转储或加载 json、验证进出日期、调用其他函数……等。
count_sync 和 count_async 变量用于跳过打开和关闭事件循环的开销。只需计算函数内部的时间。
这部分代码只是调用同步函数计数次数。
相同的代码,但现在return_random
是异步函数:
使用不同数量的调用函数和运行时间计数运行代码后,得到以下结果:
所有时间都以同步功能运行,速度快 2 倍以上。
这是否意味着在没有异步功能的情况下更好地运行同步代码?最好不要使用很多异步函数?
python - 有没有办法在 asyncio 构建的预分叉多进程 TCP 服务器上进行负载平衡?
感谢上一个答案中的人,现在我可以构建一个多进程 TCP 服务器,每个进程分别运行一个异步服务器,但都绑定到一个端口。(使用 asyncio 时无法使用 os.fork() 将多个进程绑定到一个套接字服务器)
理论上?当每个进程平等地处理传入消息时,此模型将达到其最佳性能。好处可能是更低的延迟或更高的 tps?我不确定。
这就是问题所在。我创建了一个四进程服务器,并统计了每个进程将接受多少个 tcp 请求(由不断发出新连接请求的循环客户端)。结果就像 {p1:20000 次,p2:16000 次,p3:13000次,p4:10000 次} <-- 这个。可能不是什么好结果。
我正在弄清楚锁是否会有所帮助(让获得锁的进程接受请求,而不是让进程直接竞争性地接受请求)。但事实证明,只有父进程才能获得锁,而另一个根本做不到。
试图找出解决方案,需要你的帮助。
这是一个简单的示例服务器代码(预分叉模型,其中处理竞争性地直接接受请求):
然后我们可以将其输出重定向到这样的文件中:
下一步也许我们粗略地处理这些数据:
得到这样的输出(其中 key 表示端口号,而 value 表示他们处理了多少回声):
不平等。
当我像这样引入多处理锁时,事情变得更糟了:
↑ 那么唯一能接受请求的进程就是父进程。而子进程被完全阻止。好像如果你在进程被阻塞之前获得了锁,那么它总是会这样。口译员只是忠实地按照我们的指示去做。
总之,这是我的两个问题:
- 1\如果有什么方法可以让这个预先分叉的异步服务器负载平衡?
- 2\有没有什么办法可以引入锁来帮助解决这个问题?
谢谢!
PS:如果有人能告诉我如何在pypy的解释器中使用uvloop驱动eventloop?非常感谢!
python-3.x - 正确响应来自另一个上下文的等待条件
如果正在使用 uvloop 或 asyncio,我试图探索的功能之一是如果我执行一些操作然后“等待某个条件”。
让我们看下面的例子:
然后其他一些过程会做一些工作。
那么这个进程的协程有:
现在我知道我可以使用条件变量之类的东西,但那些需要某种锁。我不关心多个人访问该协程,所以我不想“锁定”任何东西。我只是想用这个其他协程(zmq 协程)中的一些数据来通知()该上下文以返回到某个元素。
这里的关键是提取协程上下文(一些 id),然后通知 await 命令并传入这个 rval 项。
关于如何在没有锁的情况下有效地做到这一点的任何想法?
python-3.x - python加速一个简单的函数
我试图找到一种简单的方法来“加速”一个大脚本的简单功能,所以我搜索了它并找到了 3 种方法来做到这一点。但似乎他们需要的时间总是一样的。那么我做错了什么测试它们?
文件1:
文件2:
文件3:
每个文件大约需要 180-200 秒
所以我“看不出”有什么不同。