/
usr
/
local
/
lib64
/
python3.6
/
site-packages
/
pyarrow
/
include
/
arrow
/
util
/
/usr/local/lib64/python3.6/site-packages/pyarrow/include/arrow/util
mkdir
upload
Name
Size
Mode
Actions
algorithm.h
1229
0644
edit
dl
rm
aligned_storage.h
4302
0644
edit
dl
rm
align_util.h
2636
0644
edit
dl
rm
async_generator.h
64088
0644
edit
dl
rm
async_util.h
9633
0644
edit
dl
rm
atomic_shared_ptr.h
3640
0644
edit
dl
rm
base64.h
1098
0644
edit
dl
rm
basic_decimal.h
20334
0644
edit
dl
rm
benchmark_util.h
4584
0644
edit
dl
rm
bitmap.h
17463
0644
edit
dl
rm
bitmap_builders.h
1563
0644
edit
dl
rm
bitmap_generate.h
3563
0644
edit
dl
rm
bitmap_ops.h
9084
0644
edit
dl
rm
bitmap_reader.h
8347
0644
edit
dl
rm
bitmap_visit.h
3460
0644
edit
dl
rm
bitmap_writer.h
9360
0644
edit
dl
rm
bitset_stack.h
2789
0644
edit
dl
rm
bit_block_counter.h
19141
0644
edit
dl
rm
bit_run_reader.h
16599
0644
edit
dl
rm
bit_stream_utils.h
16986
0644
edit
dl
rm
bit_util.h
11568
0644
edit
dl
rm
bpacking.h
1175
0644
edit
dl
rm
bpacking64_default.h
195934
0644
edit
dl
rm
bpacking_avx2.h
1009
0644
edit
dl
rm
bpacking_avx512.h
1011
0644
edit
dl
rm
bpacking_default.h
103232
0644
edit
dl
rm
bpacking_neon.h
1009
0644
edit
dl
rm
bpacking_simd128_generated.h
98529
0644
edit
dl
rm
bpacking_simd256_generated.h
77475
0644
edit
dl
rm
bpacking_simd512_generated.h
67081
0644
edit
dl
rm
byte_stream_split.h
28784
0644
edit
dl
rm
cancel.h
2911
0644
edit
dl
rm
checked_cast.h
2076
0644
edit
dl
rm
compare.h
1981
0644
edit
dl
rm
compression.h
7367
0644
edit
dl
rm
concurrent_map.h
1775
0644
edit
dl
rm
config.h
1659
0644
edit
dl
rm
converter.h
14657
0644
edit
dl
rm
counting_semaphore.h
2251
0644
edit
dl
rm
cpu_info.h
4724
0644
edit
dl
rm
decimal.h
11687
0644
edit
dl
rm
delimiting.h
7335
0644
edit
dl
rm
dispatch.h
3235
0644
edit
dl
rm
double_conversion.h
1195
0644
edit
dl
rm
endian.h
8071
0644
edit
dl
rm
formatting.h
20612
0644
edit
dl
rm
functional.h
5612
0644
edit
dl
rm
future.h
36168
0644
edit
dl
rm
future_iterator.h
2517
0644
edit
dl
rm
hashing.h
30633
0644
edit
dl
rm
hash_util.h
1914
0644
edit
dl
rm
int_util.h
4284
0644
edit
dl
rm
io_util.h
10326
0644
edit
dl
rm
iterator.h
18123
0644
edit
dl
rm
key_value_metadata.h
3579
0644
edit
dl
rm
launder.h
1051
0644
edit
dl
rm
logging.h
9338
0644
edit
dl
rm
macros.h
7349
0644
edit
dl
rm
make_unique.h
1475
0644
edit
dl
rm
map.h
2476
0644
edit
dl
rm
math_constants.h
1106
0644
edit
dl
rm
memory.h
1566
0644
edit
dl
rm
mutex.h
1833
0644
edit
dl
rm
optional.h
1174
0644
edit
dl
rm
parallel.h
3616
0644
edit
dl
rm
pcg_random.h
1146
0644
edit
dl
rm
print.h
1725
0644
edit
dl
rm
queue.h
1017
0644
edit
dl
rm
range.h
4834
0644
edit
dl
rm
rle_encoding.h
31029
0644
edit
dl
rm
simd.h
1333
0644
edit
dl
rm
small_vector.h
14660
0644
edit
dl
rm
sort.h
2466
0644
edit
dl
rm
spaced.h
3567
0644
edit
dl
rm
stopwatch.h
1401
0644
edit
dl
rm
string.h
2570
0644
edit
dl
rm
string_builder.h
2446
0644
edit
dl
rm
string_view.h
1269
0644
edit
dl
rm
task_group.h
4362
0644
edit
dl
rm
tdigest.h
3052
0644
edit
dl
rm
test_common.h
2837
0644
edit
dl
rm
thread_pool.h
15338
0644
edit
dl
rm
time.h
2988
0644
edit
dl
rm
trie.h
7157
0644
edit
dl
rm
type_fwd.h
1409
0644
edit
dl
rm
type_traits.h
2894
0644
edit
dl
rm
ubsan.h
2777
0644
edit
dl
rm
unreachable.h
926
0644
edit
dl
rm
uri.h
3297
0644
edit
dl
rm
utf8.h
18780
0644
edit
dl
rm
value_parsing.h
27056
0644
edit
dl
rm
variant.h
13728
0644
edit
dl
rm
vector.h
5665
0644
edit
dl
rm
visibility.h
1463
0644
edit
dl
rm
windows_compatibility.h
1260
0644
edit
dl
rm
windows_fixup.h
1379
0644
edit
dl
rm
Edit:
/usr/local/lib64/python3.6/site-packages/pyarrow/include/arrow/util/async_util.h
(9633B)
// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you 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. #pragma once #include <queue> #include "arrow/result.h" #include "arrow/status.h" #include "arrow/util/future.h" #include "arrow/util/mutex.h" namespace arrow { namespace util { /// Custom deleter for AsyncDestroyable objects template <typename T> struct DestroyingDeleter { void operator()(T* p) { if (p) { p->Destroy(); } } }; /// An object which should be asynchronously closed before it is destroyed /// /// Classes can extend this to ensure that the close method is called and completed /// before the instance is deleted. This provides smart_ptr / delete semantics for /// objects with an asynchronous destructor. /// /// Classes which extend this must be constructed using MakeSharedAsync or MakeUniqueAsync class ARROW_EXPORT AsyncDestroyable { public: AsyncDestroyable(); virtual ~AsyncDestroyable(); /// A future which will complete when the AsyncDestroyable has finished and is ready /// to be deleted. /// /// This can be used to ensure all work done by this object has been completed before /// proceeding. Future<> on_closed() { return on_closed_; } protected: /// Subclasses should override this and perform any cleanup. Once the future returned /// by this method finishes then this object is eligible for destruction and any /// reference to `this` will be invalid virtual Future<> DoDestroy() = 0; private: void Destroy(); Future<> on_closed_; #ifndef NDEBUG bool constructed_correctly_ = false; #endif template <typename T> friend struct DestroyingDeleter; template <typename T, typename... Args> friend std::shared_ptr<T> MakeSharedAsync(Args&&... args); template <typename T, typename... Args> friend std::unique_ptr<T, DestroyingDeleter<T>> MakeUniqueAsync(Args&&... args); }; template <typename T, typename... Args> std::shared_ptr<T> MakeSharedAsync(Args&&... args) { static_assert(std::is_base_of<AsyncDestroyable, T>::value, "Nursery::MakeSharedCloseable only works with AsyncDestroyable types"); std::shared_ptr<T> ptr(new T(std::forward<Args&&>(args)...), DestroyingDeleter<T>()); #ifndef NDEBUG ptr->constructed_correctly_ = true; #endif return ptr; } template <typename T, typename... Args> std::unique_ptr<T, DestroyingDeleter<T>> MakeUniqueAsync(Args&&... args) { static_assert(std::is_base_of<AsyncDestroyable, T>::value, "Nursery::MakeUniqueCloseable only works with AsyncDestroyable types"); std::unique_ptr<T, DestroyingDeleter<T>> ptr(new T(std::forward<Args>(args)...), DestroyingDeleter<T>()); #ifndef NDEBUG ptr->constructed_correctly_ = true; #endif return ptr; } /// A utility which keeps track of a collection of asynchronous tasks /// /// This can be used to provide structured concurrency for asynchronous development. /// A task group created at a high level can be distributed amongst low level components /// which register work to be completed. The high level job can then wait for all work /// to be completed before cleaning up. class ARROW_EXPORT AsyncTaskGroup { public: /// Add a task to be tracked by this task group /// /// If a previous task has failed then adding a task will fail /// /// If WaitForTasksToFinish has been called and the returned future has been marked /// completed then adding a task will fail. Status AddTask(std::function<Result<Future<>>()> task); /// Add a task that has already been started Status AddTask(const Future<>& task); /// Signal that top level tasks are done being added /// /// It is allowed for tasks to be added after this call provided the future has not yet /// completed. This should be safe as long as the tasks being added are added as part /// of a task that is tracked. As soon as the count of running tasks reaches 0 this /// future will be marked complete. /// /// Any attempt to add a task after the returned future has completed will fail. /// /// The returned future that will finish when all running tasks have finsihed. Future<> End(); /// A future that will be finished after End is called and all tasks have completed /// /// This is the same future that is returned by End() but calling this method does /// not indicate that top level tasks are done being added. End() must still be called /// at some point or the future returned will never finish. /// /// This is a utility method for workflows where the finish future needs to be /// referenced before all top level tasks have been queued. Future<> OnFinished() const; private: Status AddTaskUnlocked(const Future<>& task, util::Mutex::Guard guard); bool finished_adding_ = false; int running_tasks_ = 0; Status err_; Future<> all_tasks_done_ = Future<>::Make(); util::Mutex mutex_; }; /// A task group which serializes asynchronous tasks in a push-based workflow /// /// Tasks will be executed in the order they are added /// /// This will buffer results in an unlimited fashion so it should be combined /// with some kind of backpressure class ARROW_EXPORT SerializedAsyncTaskGroup { public: SerializedAsyncTaskGroup(); /// Push an item into the serializer and (eventually) into the consumer /// /// The item will not be delivered to the consumer until all previous items have been /// consumed. /// /// If the consumer returns an error then this serializer will go into an error state /// and all subsequent pushes will fail with that error. Pushes that have been queued /// but not delivered will be silently dropped. /// /// \return True if the item was pushed immediately to the consumer, false if it was /// queued Status AddTask(std::function<Result<Future<>>()> task); /// Signal that all top level tasks have been added /// /// The returned future that will finish when all tasks have been consumed. Future<> End(); /// A future that finishes when all queued items have been delivered. /// /// This will return the same future returned by End but will not signal /// that all tasks have been finished. End must be called at some point in order for /// this future to finish. Future<> OnFinished() const { return on_finished_; } private: void ConsumeAsMuchAsPossibleUnlocked(util::Mutex::Guard&& guard); bool TryDrainUnlocked(); Future<> on_finished_; std::queue<std::function<Result<Future<>>()>> tasks_; util::Mutex mutex_; bool ended_ = false; Status err_; Future<> processing_; }; class ARROW_EXPORT AsyncToggle { public: /// Get a future that will complete when the toggle next becomes open /// /// If the toggle is open this returns immediately /// If the toggle is closed this future will be unfinished until the next call to Open Future<> WhenOpen(); /// \brief Close the toggle /// /// After this call any call to WhenOpen will be delayed until the next open void Close(); /// \brief Open the toggle /// /// Note: This call may complete a future, triggering any callbacks, and generally /// should not be done while holding any locks. /// /// Note: If Open is called from multiple threads it could lead to a situation where /// callbacks from the second open finish before callbacks on the first open. /// /// All current waiters will be released to enter, even if another close call /// quickly follows void Open(); /// \brief Return true if the toggle is currently open bool IsOpen(); private: Future<> when_open_ = Future<>::MakeFinished(); bool closed_ = false; util::Mutex mutex_; }; /// \brief Options to control backpressure behavior struct ARROW_EXPORT BackpressureOptions { /// \brief Create default options that perform no backpressure BackpressureOptions() : toggle(NULLPTR), resume_if_below(0), pause_if_above(0) {} /// \brief Create options that will perform backpressure /// /// \param toggle A toggle to be shared between the producer and consumer /// \param resume_if_below The producer should resume producing if the backpressure /// queue has fewer than resume_if_below items. /// \param pause_if_above The producer should pause producing if the backpressure /// queue has more than pause_if_above items BackpressureOptions(std::shared_ptr<util::AsyncToggle> toggle, uint32_t resume_if_below, uint32_t pause_if_above) : toggle(std::move(toggle)), resume_if_below(resume_if_below), pause_if_above(pause_if_above) {} static BackpressureOptions Make(uint32_t resume_if_below = 32, uint32_t pause_if_above = 64); static BackpressureOptions NoBackpressure(); std::shared_ptr<util::AsyncToggle> toggle; uint32_t resume_if_below; uint32_t pause_if_above; }; } // namespace util } // namespace arrow
Save
cmd:
run