Message queues are a fine approach, one that we’ve had support for in Classic by way of Beanstalk support. S currently only has support for directly using
exec, as you know, but the same system is in place to have a pluggable, configurable set of job dispatchers, so support for a message queue is possible either in the core or (possibly better as there’s a fair variety of them) from a module.
They don’t really do much for people on restricted setups though, since you still need to be running a PHP worker(s) somewhere to process the jobs. They’re also just generally a lot more setup-heavy. It would work around
exec being blocked though, I suppose.