Tomás Emilio Silva Ebensperger
09/07/2021, 7:07 PMKevin Kho
Tomás Emilio Silva Ebensperger
09/07/2021, 7:37 PMKevin Kho
Tomás Emilio Silva Ebensperger
09/07/2021, 7:40 PMKevin Kho
Tomás Emilio Silva Ebensperger
09/07/2021, 7:45 PMTomás Emilio Silva Ebensperger
09/07/2021, 7:47 PMhandler = slack_notifier(only_states=[Failed], ignore_states=[TriggerFailed])
task_time_out = 600
@task(log_stdout=True, state_handlers=[handler], timeout=task_time_out)
def extract(client_instance, limit=None):
client_instance.extract_all(limit=limit)
I use composition there.Tomás Emilio Silva Ebensperger
09/07/2021, 7:47 PMTomás Emilio Silva Ebensperger
09/07/2021, 7:48 PMfrom prefect.agent.local import LocalAgent
if __name__ == '__main__':
agent = LocalAgent()
agent.start()
Tomás Emilio Silva Ebensperger
09/07/2021, 7:48 PMKevin Kho
Tomás Emilio Silva Ebensperger
09/07/2021, 7:53 PMTomás Emilio Silva Ebensperger
09/07/2021, 7:53 PMKevin Kho
Tomás Emilio Silva Ebensperger
09/07/2021, 8:01 PMTomás Emilio Silva Ebensperger
09/07/2021, 8:10 PMKevin Kho
timeout
on Prefect is not guaranteed, it’s really a best effort because it’s very hard to stop an ongoing Python process gracefully. It’s more reliable when the compute is all on the same machine than when you start a process in Kubernetes or Dask. In this case though, I actually have seen timeouts worked on API calls (boto3), but it was coupled with a timeout on the boto3 client. I am not super sure about the Prefect timeout stopping API calls so my hope is the client stops it and then Prefect can exit the taskTomás Emilio Silva Ebensperger
09/07/2021, 8:13 PM