I realised that it probably comes with the drawback that jobs downstream from the contented resource might be delayed. Which may or may not be ok for you.
I think a proper solution might require throttling support in luigid, which is not present.
If you don't get the sleep hack to work, you could try another hack where you use the resource functionality to limit execution to a single worker, and in that worker ensure that it does not exceed the limit, which is simple within one process.
If you want to take a shot at implementing a throttle resource inside luigid, I don't think it would be difficult. You could reuse the existing resources structure, and add a mechanism that fills up resources in scheduler.get_work based on time, instead of returning resources when a task exits.