我知道使用fire-and-forget async void方法来启动任务通常被认为是一个坏主意,因为没有跟踪任务的跟踪,处理可能在这种方法中抛出的异常是很棘手的.
我一般应该避免使用async void事件处理程序吗?例如,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样重写它:
Task onFormLoadTask = null; // track the task, can implement cancellation
private void Form_Load(object sender, System.EventArgs e)
{
this.onFormLoadTask = OnFormLoadTaskAsync(sender, e);
}
private async Task OnFormLoadTaskAsync(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Run Code Online (Sandbox Code Playgroud)
除了可能的重入之外,异步事件处理程序的水下岩石是什么?
我有一些基于gevent的管理命令.由于我的管理命令使成千上万的请求,我可以使用Gevent将所有套接字调用转换为非阻塞调用.这真的加快了我的应用程序,因为我可以同时提出请求.
目前我应用程序的瓶颈似乎是Postgres.这似乎是因为用于连接Django的Psycopg库是用C语言编写的,不支持异步连接.
我还读到使用pgBouncer可以将Postgres加速2倍.这听起来不错,但如果有人能解释pgBouncer如何工作和帮助会很棒吗?
谢谢
我在 PostgreSQL 实例之一收到错误“剩余连接槽为非复制超级用户连接保留”。
但是,当我从超级用户运行以下查询以检查可用连接时,我发现有足够的可用连接。但仍然得到同样的错误。
select max_conn,used,res_for_super,max_conn-used-res_for_super
res_for_normal
from
(select count(*) used from pg_stat_activity) t1,
(select setting::int res_for_super from pg_settings where
name='superuser_reserved_connections') t2,
(select setting::int max_conn from pg_settings where name='max_connections') t3
Run Code Online (Sandbox Code Playgroud)
输出
我搜索了这个错误,每个人都建议像下面的链接一样增加最大连接数。 Heroku“psql:致命:剩余的连接槽是为非复制超级用户连接保留的”
编辑
我重新启动了服务器,一段时间后使用的连接数接近 210,但我能够从普通用户连接到服务器。
我收到运行Heroku Postgres Basic的上述错误消息(根据此问题),并一直在尝试诊断问题.
其中一个建议是使用连接池,但似乎Rails内置了它.另一个建议是应用程序配置不正确并打开太多连接.
我的应用程序通过Active Record管理它的所有连接,我从Navicat直接连接到数据库(或者至少我以为我有).
我该怎么调试呢?
解析度
事实证明这是一个Heroku问题.来自Heroku支持:
我们在运行Basic数据库的服务器上检测到了一个问题.虽然我们查明并解决了这个问题,但我们建议您配置一个新的Basic数据库并使用PGBackups进行迁移,详情请参见 https://devcenter.heroku.com/articles/upgrade-heroku-postgres-with-pgbackups .这应该将您的数据库放在新服务器上.我为这次中断道歉 - 我们正在努力解决这个问题并防止它在未来发生.
我从Play 2.0.3 java应用程序中收到此错误.我怎么能重新启动Heroku Postgres Dev DB?我找不到在Heroku帮助中心重启数据库的任何说明.
app[web.1]: Caused by: org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections
Run Code Online (Sandbox Code Playgroud) postgresql ×3
heroku ×2
.net ×1
activerecord ×1
async-await ×1
asynchronous ×1
c# ×1
django ×1
events ×1
pgbouncer ×1
python ×1