问题标签 [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.
python - 为 aiohttp 低级服务器选择部署选项
我完全迷失了我的 aiohttp 服务器的部署选项;有多种方法可以在生产中移动服务,我无法选择正确的一种:
- systemd script/supervisord + api hour 缺点:我不明白 api hour 是如何工作的,好像啊控制了服务器的守护进程协程,但是我的服务器的 coro 运行(低级别 aiohttp 服务器/连接处理程序)在 asyncio.gather 函数中其他 coro(主管/状态管理员的类永远运行方法),使用 api 小时处理第二个协程可能会出现问题
- gunicorn 和 1 一样
- nginx + unix socket +systemd 脚本 缺点:看起来很难部署和支持;
- systemd 脚本下的纯 aiohttp 服务器:缺点:处理 pid 文件,性能低下(?)我很乐意看到任何关于我的问题的想法,谢谢!
我的运行功能如下所示:
python - Asyncio + aiohttp - redis Pub/Sub 和 websocket 在单个处理程序中读/写
我目前正在使用aiohttp来查看它如何作为具有 websocket 连接的移动应用程序的服务器应用程序执行。
这是简单的“Hello world”示例(此处为要点):
问题
现在我想使用下面描述的结构(节点服务器 = python aiohttp)。更具体地说,使用带有asyncio-redis的Redis Pub/Sub机制在我的WebsocketEchoHandler中读取和写入 websocket 连接和 Redis 。
WebsocketEchoHandler是一个简单的循环,所以我不知道应该怎么做。使用Tornado和brükva我只会使用回调。
额外的(也许是离题的)问题
由于我已经在使用Redis,我应该采用以下两种方法中的哪一种:
- 就像在“经典”网络应用程序中一样,对所有内容都有一个控制器/视图,将Redis用于消息传递等。
- Web 应用程序应该只是客户端和Redis之间的一层,也用作任务队列(最简单的Python RQ)。每个请求都应该委托给工人。
编辑
图片来自http://goldfirestudios.com/blog/136/Horizontally-Scaling-Node.js-and-WebSockets-with-Redis
编辑 2
看来我需要澄清一下。
- Websocket-only 处理程序如上所示
Redis Pub/Sub 处理程序可能如下所示:
此处理程序仅订阅 Redis 通道ch1和ch2,并将从这些通道接收到的每个消息发送到 websocket。
我想要这个处理程序:
但是以下代码总是按顺序调用,因此从 websocket 读取会阻止从 Redis 读取:
/li>
我希望在事件是从两个来源之一收到消息的事件上完成阅读。
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 等):
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对象)
有谁知道我怎样才能做到这一点?谢谢!
python - aiohttp 在一段时间后停止发送
我正在编写一些代码,这些代码需要向某个服务器发送并发 HTTP 请求,以防万一出现错误,它应该重试。当我运行它时,我看到快速发送,几分钟后发送速度降低到 0。就像某些东西被锁定并且没有释放,它只是停止发送。
发送数据的函数是这个
连接器正在初始化
通过将 800 个任务添加到列表中来调用发送函数,然后等待它们避免阻塞 io
我在调试它时遇到问题,甚至无法弄清楚问题所在。有人有线索吗?
python - Python aiohttp 请求停止但未引发异常
我aiohttp
用来请求网址。大多数时候它运行正常,但有时它会停止而不会引发任何异常。
正如您在代码中看到的,我捕获了所有异常,但是当它停止时,不会打印任何异常日志。
日志如下所示:
但 ' res = yield from r.json()
' 不打印,它停止并且不抛出任何异常。
python - 烧瓶+异步
我的目标是将应用程序从 python2 升级到 python3。该应用程序使用以下包:flask、flask-admin、gevent(协程)、socketio。Flask 决定离开,剩下的包要换掉。已经多次尝试更换软件包:
- Tornado + SockJS:由于缺少 SockJS 通道,需要大量额外的代码
- Flask-aiohttp:在授权期间, request.form['username'] 抛出错误:
回溯(最近一次通话最后):
那么,Flask-aiohttp 工作可以做些什么呢?或者用什么包代替?
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-1
,attachment-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,天知道为什么!
python-3.x - 配置由 gunicorn 托管的 aiohttp 应用程序
我实现了我的第一个aiohttp
基于 REST 的服务,它作为一个玩具示例运行得非常好。现在我想使用gunicorn
. 我找到的所有示例都在某个模块中指定了一些准备好的应用程序,然后由gunicorn
. 这需要我在导入时设置应用程序,这是我不喜欢的。我想指定一些我使用的配置文件(development.ini、production.ini),Pyramid
并基于该ini文件设置应用程序。
这对或多或少的所有 python web 框架都很常见,但我不知道如何使用 aiohttp + gunicorn 来做到这一点。使用这些工具在开发和生产设置之间切换的最聪明的方法是什么?