У меня более миллиона файлов json, и я пытаюсь найти самый быстрый способ сначала проверить, загружаются ли они, а затем, существуют ли key_A
, key_B
или ни то, ни другое. Я думал, что смогу использовать луч, чтобы ускорить этот процесс, но открытие файла, похоже, не работает с лучом.
В качестве упрощения, вот моя попытка просто проверить, загрузится ли файл:
import ray
ray.init()
@ray.remote
class Counter(object):
def __init__(self):
self.good = 0
self.bad = 0
def increment(self, j):
try:
with open(j, 'r') as f:
l = json.load(f)
self.good += 1
except: # all files end up here
self.bad += 1
def read(self):
return (self.good, self.bad)
counter = Counter.remote()
[counter.increment.remote(j) for j in json_paths]
futures = counter.read.remote()
print(ray.get(futures))
Но в итоге у меня получается (0, len(json_paths))
.
Для справки, у меня есть немного более сложная фактическая конечная цель: проверить:
new, old, bad = 0,0,0
try:
with open(json_path, 'r') as f:
l = json.load(f)
ann = l['frames']['FrameLabel']['annotations']
first_object = ann[0][0]
except:
bad += 1
return
if 'object_category' in first_object:
new += 1
elif 'category' in first_object:
old += 1
else:
bad += 1