繁体   English   中英

如何停止 Postgrex 进程及其 TypeServer 进程?

[英]How to stop a Postgrex process and its TypeServer process?

我有几千个数据库。 我想一个接一个地连接到它们中的每一个并发出查询。 我通过为每个人启动一个这样的 Postgrex 进程来做到这一点。

  {:ok, pid} =
    Postgrex.start_link(
      port: database.port,
      hostname: database.host,
      username: database.username,
      password: database.password,
      database: database.database_name
    )   

然后我发出一个Postgrex.query ,然后像这样停止它

  :ok = GenServer.stop(pid, :normal)

一切似乎都很好,除了我最终有数千个Postgrex.TypeServer进程吃掉了 memory 似乎有一段时间没有清理干净。

有没有更好的方法来清理Postgrex进程,以便TypeServer也停止?

我在 Postgrex 0.13.3 上。

编辑:

为了澄清一点,我想在每个 Postgrex 进程停止后清理 TypeServer。 在整个 Enum.map 完成后清理所有 TypeServer 对我来说并不是那么有用,因为它会导致 memory 缓慢增长,然后是急剧下降而不是平线。

Enum.map(databases, fn database ->
  {:ok, pid} = Postgrex.start_link(port: database.port, hostname: database.host, username: database.username, password: database.password, database: database.database_name)   
  Postgrex.query!(pid, "some query", [])
  :ok = GenServer.stop(pid, :normal)
  # something here to clean up the TypeServer
end)

我没有深入挖掘它,但Postgrex.TypeServer 动态Postgrex.TypeSupervisor管理,幸运的是它以硬编码的 name 开头

所以我的疯狂猜测应该是以下内容:

DynamicSupervisor.stop(Postgrex.TypeSupervisor)

此外,关闭Postgrex.App也应该有所帮助

Application.stop(:postgrex)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM