Kill zombies
I defined zombies as started jobs with a `last_heartbeat` that is older than `max_missing_heartbeats * heartbeat_time_interval_seconds`

Then I added `kill_zombies` to the worker executor. It runs every `kill_zombies_time_interval_seconds` seconds and set the zombie jobs status to ERROR.

Given that heartbeats happen every 60s, I defined:
- max_missing_heartbeats = 5
- kill_zombies_time_interval_seconds = 10min

## Implementations details

To keep full control on the time interval for every action the executor runs, I switched to `asyncio`

close https://github.com/huggingface/datasets-server/issues/741
Kill zombies: I defined zombies as started jobs with a `last_heartbeat` that is older than `max_missing_heartbeats * heartbeat_time_interval_seconds`

Then I added `kill_zombies` to the worker executor. It runs every `kill_zombies_time_interval_seconds` seconds and set the zombie jobs status to ERROR.

Given that heartbeats happen every 60s, I defined:
- max_missing_heartbeats = 5
- kill_zombies_time_interval_seconds = 10min

## Implementations details

To keep full control on the time interval for every action the executor runs, I switched to `asyncio`

close https://github.com/huggingface/datasets-server/issues/741