Commit 841d5087 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Facebook GitHub Bot

Cache python-import in getExecutor

Summary: [Folly] Cache python-import in `getExecutor` so that it happens only once overall rather than once per call.

Reviewed By: nanshu

Differential Revision: D23657508

fbshipit-source-id: 06d3bd53303cac9c10fff74f4e6daaeccdc59471
parent 3fdcf359
......@@ -158,11 +158,13 @@ REMOVE_MATCHES_FROM_LISTS(files hfiles
list(REMOVE_ITEM files
${FOLLY_DIR}/experimental/JSONSchemaTester.cpp
${FOLLY_DIR}/experimental/io/HugePageUtil.cpp
${FOLLY_DIR}/python/executor.cpp
${FOLLY_DIR}/python/fibers.cpp
${FOLLY_DIR}/python/GILAwareManualExecutor.cpp
${FOLLY_DIR}/cybld/folly/executor.cpp
)
list(REMOVE_ITEM hfiles
${FOLLY_DIR}/python/executor.h
${FOLLY_DIR}/python/fibers.h
${FOLLY_DIR}/python/GILAwareManualExecutor.h
)
......
/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <folly/python/executor.h>
#include <stdexcept>
#include <folly/CppAttributes.h>
#include <folly/python/AsyncioExecutor.h>
#include <folly/python/executor_api.h> // @manual
namespace folly {
namespace python {
namespace {
void do_import() {
if (0 != import_folly__executor()) {
throw std::runtime_error("import_folly__executor failed");
}
}
} // namespace
folly::Executor* getExecutor() {
FOLLY_MAYBE_UNUSED static bool done = (do_import(), false);
return get_executor();
}
} // namespace python
} // namespace folly
......@@ -16,15 +16,12 @@
#pragma once
#include <folly/python/executor_api.h> // @manual
#include <folly/Executor.h>
namespace folly {
namespace python {
inline folly::Executor* getExecutor() {
import_folly__executor();
return get_executor();
}
folly::Executor* getExecutor();
} // namespace python
} // namespace folly
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment