[英]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.