Open dynamicbutter opened 8 years ago
We solved that same problem by having a global "watchdog" process in our node that monitors each such gen_server
and the python worker it's using, so that when the gen_server
dies, the watchdog calls python:stop/1
Yeah, that's certainly another way to do it. I think a lot of users are likely to run into this issue so enhancing erlport seems like the right thing to do.
Agree
I would suggest you make a pull request with the proposed changes
We are using erlport to communicate with pools of Python processes in a production system. Each Python OS process has a 1-1 gen_server that utilizes erlport for bi-directional communication between the erlang VM and Python. The problem we have is the pooler library we are using does brutal_kill on the gen_server when a pool is shutdown leading to an untrappable exit of the gen_server. So we do not have an opportunity in our gen_server to terminate the port and we end up leaking Python processes. One way to resolve this problem is to enhance erlport to monitor its callers and call port_close whenever the last caller associated with the port has been shutdown. Here is a solution that I have tested in our environment.