def fake_remote_fct( docker_auth: DockerBasicAuth, service_key: str, service_version: str, input_data: TaskInputData, output_data_keys: TaskOutputDataSchema, log_file_url: AnyUrl, command: List[str], ) -> TaskOutputData: # get the task data worker = get_worker() task = worker.tasks.get(worker.get_current_task()) assert task is not None print(f"--> task {task=} started") cancel_event = Event(TaskCancelEventName.format(task.key)) # tell the client we are started start_event = Event(_DASK_EVENT_NAME) start_event.set() # sleep a bit in case someone is aborting us print("--> waiting for task to be aborted...") cancel_event.wait(timeout=10) if cancel_event.is_set(): # NOTE: asyncio.CancelledError is not propagated back to the client... print("--> raising cancellation error now") raise TaskCancelledError return TaskOutputData.parse_obj({"some_output_key": 123})
def fake_remote_fct( docker_auth: DockerBasicAuth, service_key: str, service_version: str, input_data: TaskInputData, output_data_keys: TaskOutputDataSchema, log_file_url: AnyUrl, command: List[str], ) -> TaskOutputData: # wait here until the client allows us to continue start_event = Event(_DASK_EVENT_NAME) start_event.wait(timeout=5) if fail_remote_fct: raise ValueError("We fail because we're told to!") return TaskOutputData.parse_obj({"some_output_key": 123})
def wait_for_it_ok(x): event = Event("x") # Event is set in another task assert event.wait(timeout=0.5) assert event.is_set()
def wait_for_it_failing(x): event = Event("x") # Event is not set in another task so far assert not event.wait(timeout=0.05) assert not event.is_set()