|
|
|
@ -128,8 +128,10 @@ class _DataLoaderIterSingleProcess(_DataLoaderIterBase):
|
|
|
|
|
self._need_check_feed = [
|
|
|
|
|
v.desc.need_check_feed() for v in self._feed_list
|
|
|
|
|
]
|
|
|
|
|
# if only 1 place, do not need to keep order
|
|
|
|
|
self._blocking_queue = core.init_lod_tensor_blocking_queue(
|
|
|
|
|
core.Variable(), self._blocking_queue_capacity, True)
|
|
|
|
|
core.Variable(), self._blocking_queue_capacity,
|
|
|
|
|
len(self._places) > 1)
|
|
|
|
|
self._reader = core.create_py_reader(
|
|
|
|
|
self._blocking_queue, self._var_names, self._shapes, self._dtypes,
|
|
|
|
|
self._need_check_feed, self._places, self._use_buffer_reader, True)
|
|
|
|
@ -280,8 +282,9 @@ class _DataLoaderIterMultiProcess(_DataLoaderIterBase):
|
|
|
|
|
self._need_check_feed = [
|
|
|
|
|
v.desc.need_check_feed() for v in self._feed_list
|
|
|
|
|
]
|
|
|
|
|
# if only 1 place, do not need to keep order
|
|
|
|
|
self._blocking_queue = core.init_lod_tensor_blocking_queue(
|
|
|
|
|
core.Variable(), self._outstanding_capacity, True)
|
|
|
|
|
core.Variable(), self._outstanding_capacity, len(self._places) > 1)
|
|
|
|
|
self._reader = core.create_py_reader(
|
|
|
|
|
self._blocking_queue, self._var_names, self._shapes, self._dtypes,
|
|
|
|
|
self._need_check_feed, self._places, self._use_buffer_reader, True)
|
|
|
|
@ -442,6 +445,11 @@ class _DataLoaderIterMultiProcess(_DataLoaderIterBase):
|
|
|
|
|
# get data again
|
|
|
|
|
data = self._data_queue.get(timeout=self._timeout)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# check if thread done event set when waiting data
|
|
|
|
|
if self._thread_done_event.is_set():
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
# check failed workers
|
|
|
|
|
failed_workers = []
|
|
|
|
|
for i, w in enumerate(self._workers):
|
|
|
|
|
if self._worker_status[i] and not w.is_alive():
|
|
|
|
|