如何使用fork()在多处理环境中处理Tensorflow会话? 我正在运行一个运行TysFoeSoad的C++应用程序。应用程序必须与fork()配合运行,如下代码所示。然而,我明白了这一点。当代码到达Session.run()命令时,代码挂起。由于我是C++初学者,我想问你一个建议,我应该如何运行TysFoSurf。p>

如何使用fork()在多处理环境中处理Tensorflow会话? 我正在运行一个运行TysFoeSoad的C++应用程序。应用程序必须与fork()配合运行,如下代码所示。然而,我明白了这一点。当代码到达Session.run()命令时,代码挂起。由于我是C++初学者,我想问你一个建议,我应该如何运行TysFoSurf。p>,c++,tensorflow,fork,C++,Tensorflow,Fork,编辑:对象是在主线程中创建的,可以多次调用fork() int main () { Myapp myapp("path_to_model"); switch(fork()) { case 0: {/* Child */ myapp.get_embedding(some_data); break; } case -1:{ /* Error */ cerr << "Problem forking" <&

编辑:对象是在主线程中创建的,可以多次调用
fork()

int main ()
{
  Myapp myapp("path_to_model");
  switch(fork()) {
    case 0: {/* Child */
        myapp.get_embedding(some_data);
        break;
    }
    case -1:{ /* Error */
        cerr << "Problem forking" << endl;
        break;
    }
    default:
        cout << "on the parent process";
        break;
    }
  }

  return 0;
}
int main()
{
Myapp Myapp(“路径到模型”);
开关(fork()){
案例0:{/*子案例*/
myapp.get_嵌入(一些_数据);
打破
}
案例-1:{/*错误*/

cerr与您的问题无关,但名称以下划线开头,后跟大写字母(例如
\u MYAPP\u H
)保留给编译器和标准库实现。不要自己定义这样的符号或名称。有关详细信息,请参阅。@Someprogrammerdude:谢谢。如果您先分叉,然后初始化Tensorfllow,您应该可以。@n.m.这听起来很合理,但可能会分叉很多次,并且对象是在主进程中创建的。我将添加t他回答了这个问题。
//#ifndef _MYAPP_H_
//#define _MYAPP_H_
#ifndef MYAPP_H_
#define MYAPP_H_

#include <iostream>
#include <tensorflow/core/public/session.h>
using namespace std;
using namespace tensorflow;

class Myapp {
    string protobuf_fn; // model filename
    public:
        Session *sess;
        /*constructor with model file name*/
        Myapp (string pb_fn){
            //init the session and load the graph
          TF_CHECK_OK(loadModelpb(pb_fn));
        }
        /*read trained model file into the session*/
        tensorflow::Status loadModelpb(string pb_fn);

        /* get an embedding by running Session.run()
         * For now, it hangs when gets called on a child process.
         */
        Tensor get_embedding(Data some_data) const;

};

#endif /*_MYAPP_H_*/