gRPC对象会创建无法关闭的额外进程

时间:2019-09-25 12:50:16

标签: python ubuntu multiprocessing grpc

我使用gRPC servicer开发了该应用程序。我的应用程序的重点是:

  1. gRPC服务程序(下面的代码中的DexFxServicer类)具有Transmit方法,该方法由gRPC客户端在外部调用。

  2. Transmit方法为hostList中的不同主机创建多个通道和存根。

  3. 其他应用程序创建并启动进程池。

  4. 每个子进程为其自己的存根调用gRPC方法SendHostListAndGetMetrics并接收响应迭代器。

此代码运行良好,应用程序调用Transmit方法并从进程池接收所有需要的结果。但是我注意到,当外部gRPC客户端多次调用Transmit方法时,此代码并未关闭其某些子进程。如htop所示,这会导致额外的非关闭进程的创建。 当我尝试通过channel.close()方法关闭gRPC通道时,将更加密集地创建额外的进程。

Python 2.7.12 grpcio == 1.16.1 grpcio-tools == 1.16.1 通用Ubuntu 16.04.6 LTS 4.4.0-143

public class MainActivity extends AppCompatActivity {
    private String[] str = new String[10];
    int count = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView) findViewById(R.id.list_view);  //build listview
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, str);
        listView.setAdapter(adapter);
    }


    public void sendMessage(View view){
        EditText editText = (EditText) findViewById(R.id.editText);
        if(count < str.length){
             str[count] = editText.getText().toString();
             count++;
        }
    }
}

我希望看到不会创建额外的非关闭流程的代码。请给我建议在这种情况下该怎么办。

1 个答案:

答案 0 :(得分:0)

此问题已通过将grpcio版本更新为1.23.0来解决。 gRPC issue