问题标签 [aiohttp]

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 投票
1 回答
1284 浏览

python - 为 aiohttp 低级服务器选择部署选项

我完全迷失了我的 aiohttp 服务器的部署选项;有多种方法可以在生产中移动服务,我无法选择正确的一种:

  1. systemd script/supervisord + api hour 缺点:我不明白 api hour 是如何工作的,好像啊控制了服务器的守护进程协程,但是我的服务器的 coro 运行(低级别 aiohttp 服务器/连接处理程序)在 asyncio.gather 函数中其他 coro(主管/状态管理员的类永远运行方法),使用 api 小时处理第二个协程可能会出现问题
  2. gunicorn 和 1 一样
  3. nginx + unix socket +systemd 脚本 缺点:看起来很难部署和支持;
  4. systemd 脚本下的纯 aiohttp 服务器:缺点:处理 pid 文件,性能低下(?)我很乐意看到任何关于我的问题的想法,谢谢!

我的运行功能如下所示:

0 投票
2 回答
9461 浏览

python - Asyncio + aiohttp - redis Pub/Sub 和 websocket 在单个处理程序中读/写

我目前正在使用aiohttp来查看它如何作为具有 websocket 连接的移动应用程序的服务器应用程序执行。

这是简单的“Hello world”示例(此处为要点):

问题

现在我想使用下面描述的结构(节点服务器 = python aiohttp)。更具体地说,使用带有asyncio-redis的Redis Pub/Sub机制在我的WebsocketEchoHandler中读取和写入 websocket 连接和 Redis 。

WebsocketEchoHandler是一个简单的循环,所以我不知道应该怎么做。使用Tornadobrükva我只会使用回调。

http://goldfirestudios.com/blog/136/Horizo​​ntally-Scaling-Node.js-and-WebSockets-with-Redis

额外的(也许是离题的)问题

由于我已经在使用Redis,我应该采用以下两种方法中的哪一种:

  1. 就像在“经典”网络应用程序中一样,对所有内容都有一个控制器/视图,将Redis用于消息传递等。
  2. Web 应用程序应该只是客户端和Redis之间的一层,也用作任务队列(最简单的Python RQ)。每个请求都应该委托给工人。

编辑

图片来自http://goldfirestudios.com/blog/136/Horizo​​ntally-Scaling-Node.js-and-WebSockets-with-Redis

编辑 2

看来我需要澄清一下。

  • Websocket-only 处理程序如上所示
  • Redis Pub/Sub 处理程序可能如下所示:

    此处理程序仅订阅 Redis 通道ch1ch2,并将从这些通道接收到的每个消息发送到 websocket。

  • 我想要这个处理程序:

    但是以下代码总是按顺序调用,因此从 websocket 读取会阻止从 Redis 读取:

    /li>

我希望在事件是从两个来源之一收到消息的事件上完成阅读。

0 投票
1 回答
3758 浏览

python - 基于 aiohttp-form 的身份验证

我找不到aiohttp与登录页面结合使用的工作代码。目标很简单:使用用户名和密码进行基于表单的身份验证,我希望在随后的 aiohttp 异步获取调用中使用该 cookie。

似乎整个 Session 概念在版本之间的 aiohttp 中发生了变化,所以我很好奇如何在最新版本中实现它。我不确定如何获取 cookie 一次然后在异步事务中使用它。

我真的很想看到一个完整的例子,因为不幸的是我无法让它与我在各处找到的片段一起工作。

我想这可能是开始,但我不确定,我当然不知道如何将所有东西连接到它(我还需要一个aiohttp.TCPConnector吗?) http://aiohttp.readthedocs.org/en/latest/ client_reference.html#aiohttp.client.ClientSession

我在 Python 2 中使用 mechanize 的非异步版本示例(尽管我自然地将 Python 3 用于 asyncio 等):

0 投票
1 回答
2477 浏览

python - 使用 gunicorn 和 nginx 部署 aiohttp.web 应用程序

我正在尝试部署一个 aiohttp Web 应用程序,但不知道如何让应用程序通过 unix 套接字提供服务,我认为我需要这样才能让 nginx 和 gunicorn 相互通信。

aiohttp 文档中保存为 app.py 的简单示例应用程序:

直接用 gunicorn 运行它:

但是,当我尝试将其绑定到 unix 套接字时,出现以下错误。

追溯:

我在 aiohttp 问题 ( https://github.com/KeepSafe/aiohttp/issues/136 ) 中遇到了一些问题,它使用套接字创建一个套接字作为参数放入 loop.create_server() 函数中,但我只是不能没有任何工作。(我也不知道他代码里的app是不是同一个web.Application对象)

有谁知道我怎样才能做到这一点?谢谢!

0 投票
0 回答
555 浏览

python - aiohttp 在一段时间后停止发送

我正在编写一些代码,这些代码需要向某个服务器发送并发 HTTP 请求,以防万一出现错误,它应该重试。当我运行它时,我看到快速发送,几分钟后发送速度降低到 0。就像某些东西被锁定并且没有释放,它只是停止发送。

发送数据的函数是这个

连接器正在初始化

通过将 800 个任务添加到列表中来调用发送函数,然后等待它们避免阻塞 io

我在调试它时遇到问题,甚至无法弄清楚问题所在。有人有线索吗?

0 投票
1 回答
1605 浏览

python - Python aiohttp 请求停止但未引发异常

aiohttp用来请求网址。大多数时候它运行正常,但有时它会停止而不会引发任何异常。

正如您在代码中看到的,我捕获了所有异常,但是当它停止时,不会打印任何异常日志。

日志如下所示:

但 ' res = yield from r.json()' 不打印,它停止并且不抛出任何异常。

0 投票
2 回答
12052 浏览

python - 烧瓶+异步

我的目标是将应用程序从 python2 升级到 python3。该应用程序使用以下包:flask、flask-admin、gevent(协程)、socketio。Flask 决定离开,剩下的包要换掉。已经多次尝试更换软件包:

  1. Tornado + SockJS:由于缺少 SockJS 通道,需要大量额外的代码
  2. Flask-aiohttp:在授权期间, request.form['username'] 抛出错误:

回溯(最近一次通话最后):

那么,Flask-aiohttp 工作可以做些什么呢?或者用什么包代替?

0 投票
1 回答
534 浏览

python - Aiohttp wsgi 处理程序不起作用

我需要用 aiohttp 包装我的 Flask 应用程序。当我启动它时,出现错误:

代码:

当我将例中的路线更改为

它引发 ValueError:路径应以 / 开头。我究竟做错了什么?

0 投票
1 回答
1112 浏览

python-3.x - 如何从传入的 Mailgun 路由中获取附件?

我正在使用aiohttp. 我有一个处理 Mailgun 路由数据的 api。电子邮件有多个附件。我无法阅读所有附件。它只给了我一个。

data是我收到的。

str(list(data.keys()))给我清单-['Content-Type', 'Date', 'Dkim-Signature', 'From', 'Message-Id', 'Mime-Version', 'Received', 'Received', 'Received', 'Subject', 'To', 'X-Envelope-From', 'X-Mailgun-Incoming', 'X-Received', 'attachment-count', 'body-html', 'body-plain', 'from', 'message-headers', 'recipient', 'sender', 'signature', 'stripped-html', 'stripped-signature', 'stripped-text', 'subject', 'timestamp', 'token', 'attachment-1']

str(data.get('attachment-count')当我在电子邮件中发送多个文件时给我 2/3/4 - 这很好。但是只有一个键作为attachment-1

疑点:

键中是否attachment-1表明 ? 中只有一个文件data

如果有多个文件,这是否意味着有键 - attachment-1attachment-2....

如何从电子邮件中检索所有文件?

我尝试查找 Mailgun 的文档,但没有获得阅读文件的具体帮助。有人可以将我重定向到相同的代码。其他字段如from,subject就好了。

我试过的这个随机的东西也只读取一个文件。不过,这似乎是错误的。

* 更新 *

我尝试运行烧瓶服务器并测试了包含多个文件的电子邮件:

print(request.files)印刷ImmutableMultiDict([('attachment-2', <FileStorage: 'Screen Shot 2015-09-02 at 10.18.37 am.png' ('image/png')>), ('attachment-1', <FileStorage: 'Screen Shot 2015-09-02 at 10.18.36 am.png' ('image/png')>)])

这表明确实有两个文件。

现在,aiohttp 处理 mailgun 数据的方式肯定存在问题:

打印request.post()只给出一个文件 - 'attachment-1': Field(name='attachment-1', filename='Screen Shot 2015-09-02 at 10.40.18 am.png', file=<_io.BufferedRandom name=10>, content_type='image/png'). 没有附件2,天知道为什么!

0 投票
1 回答
270 浏览

python-3.x - 配置由 gunicorn 托管的 aiohttp 应用程序

我实现了我的第一个aiohttp基于 REST 的服务,它作为一个玩具示例运行得非常好。现在我想使用gunicorn. 我找到的所有示例都在某个模块中指定了一些准备好的应用程序,然后由gunicorn. 这需要我在导入时设置应用程序,这是我不喜欢的。我想指定一些我使用的配置文件(development.ini、production.ini),Pyramid并基于该ini文件设置应用程序。

这对或多或少的所有 python web 框架都很常见,但我不知道如何使用 aiohttp + gunicorn 来做到这一点。使用这些工具在开发和生产设置之间切换的最聪明的方法是什么?