Я подозреваю, что что-то вроде:
@memoize
def foo():
return something_expensive
def main():
with ProcessPoolExecutor(10) as pool:
futures = {pool.submit(foo, arg): arg for arg in args}
for future in concurrent.futures.as_completed(futures):
arg = futures[future]
try:
result = future.result()
except Exception as e:
sys.stderr.write("Failed to run foo() on {}\nGot {}\n".format(arg, e))
else:
print(result)
Не будет работать (при условии, что @memoize
является типичным кешем на основе dict) из-за того, что я использую многопроцессорный пул, а процессы не имеют большого общего доступа. По крайней мере, это не работает.
Как правильно запоминать в этом случае? В конечном счете, я также хотел бы сохранить кеш на диск и загрузить его при последующих запусках.
multiprocessing
, или вы пробовали какой-либо из подходов упоминается в документах? - person juanpa.arrivillaga   schedule 23.07.2019