Ошибка подключения через сервер Python Flask и прослушиватель libcurl C ++ - PullRequest
0 голосов
/ 04 марта 2019

Я использую openAI gym (который разработан в Python) через http-соединение в C++, которое доступно в [https://github.com/openai/gym-http-api/tree/master][1].Сервер создается путем вызова gym_http_server.py, который использует Flask, а код C++ использует libcurl для публикации и получения результата, который доступен в каталоге cpp-binding.

Когда я вызываю python-сервер по python3 gym_http_server.py, скручивание завершается ошибкой: curle_couldnt_connect после нескольких сотен итераций публикации.Это происходит в функции POST:

Json::Value POST(const std::string& route, const std::string& post_data)
{
    std::string url = "http://" + addr + route;
    if (verbose) printf("POST %s\n%s\n", url.c_str(), post_data.c_str());
    curl_easy_setopt(h.get(), CURLOPT_URL, url.c_str());
    curl_easy_setopt(h.get(), CURLOPT_PORT, port);
    std::string answer;
    curl_easy_setopt(h.get(), CURLOPT_WRITEDATA, &answer);
    curl_easy_setopt(h.get(), CURLOPT_POST, 1);
    curl_easy_setopt(h.get(), CURLOPT_POSTFIELDS, post_data.c_str());
    curl_easy_setopt(h.get(), CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)post_data.size());
    curl_easy_setopt(h.get(), CURLOPT_HTTPHEADER, headers.get());

    CURLcode r = curl_easy_perform(h.get());
    if (r)
        throw std::runtime_error(curl_error_buf.data());

    Json::Value j;
    throw_server_error_or_response_code(answer, j);
    return j;
}

, которая вызывается в Json::Value ans = client->POST("/v1/envs/" + instance_id + "/step/", act_json.toStyledString());, все доступно в 'gym_binding.cpp'.

Я также контролировал memory и cpu использование обеих сторон python и C++, и я мог найти что-то ненормальное.Кроме того, еще одно наблюдение, мне пришлось по какой-то причине перезагрузить сервер, и после этого он работал нормально в течение полутора дней, хотя после этого он снова перестал работать.

Тогда странный момент заключается в том, что когда я вызываю сервер python pudb3 gym_http_server.py, который является отладчиком python, все работает нормально.Я начал pudb, чтобы найти возможную проблему с сервером Flask, и нашел это наблюдение.По-видимому, pudb медленнее, чем python (с точки зрения времени процессора для выполнения того же кода), но я не понял причину наблюдения.

Учитывая эту ситуацию, я подумал, что, вероятно, для настройки Flask доступны некоторые настройки, чтобы он работал с обычным вызовом python3 вместо pudb3.Я ценю любую помощь или комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...