def counter(ref): cached_result = soft_cache.try_get_cache([ref], "wc") if cached_result is not None: print "Counter: got cached result! It was", cached_result else: with skypy.deref_as_raw_file(ref, make_sweetheart=True) as in_fp: cached_result = len(in_fp.read()) print "Counter: calculated result anew. It was", cached_result soft_cache.put_cache([ref], "wc", cached_result) return cached_result
skypy.current_task.main_coro_callback = None else: break # We're back -- either the user script is done, or else it's stuck waiting on a reference. if skypy.current_task.halt_reason == skypy.HALT_RUNTIME_EXCEPTION: report = "User script exception %s\n%s" % (str(skypy.current_task.script_return_val), skypy.current_task.script_backtrace) out_message = ("error", {"report": report}) else: if skypy.current_task.halt_reason == skypy.HALT_REFERENCE_UNAVAILABLE: out_dict = {"executor_name": "skypy", "extra_dependencies": [SW2_FutureReference(x) for x in skypy.current_task.persistent_state.ref_dependencies.keys()], "is_fixed": skypy.current_task.persistent_state.is_fixed } if not skypy.current_task.persistent_state.is_fixed: coro_ref = skypy.save_state(resume_state, make_local_sweetheart=True) soft_cache.put_cache([coro_ref], "coro", resume_state) out_dict.update({"pyfile_ref": skypy.current_task.persistent_state.py_ref, "coro_ref": coro_ref}) write_framed_json(("tail_spawn", out_dict), write_fp) elif skypy.current_task.halt_reason == skypy.HALT_DONE: out_fp = MaybeFile(open_callback=lambda: skypy.open_output(0)) with out_fp: if skypy.current_task.persistent_state.export_json: simplejson.dump(skypy.current_task.script_return_val, out_fp) else: pickle.dump(skypy.current_task.script_return_val, out_fp) skypy.ref_from_maybe_file(out_fp, 0) if skypy.current_task.persistent_state.is_fixed: out_message = ("exit", {"keep_process": "must_keep"}) else: out_message = ("exit", {"keep_process": "may_keep", "soft_cache_keys": soft_cache.get_cache_keys()})