I may be missing something but I think this could be done more cleanly with an atomic counter or semaphore [1] in Redis.
1. Have a task that releases 1 resource to the semaphore
every (1.0 / cps) seconds.
2. Workers wait to acquire a resource from the semaphore
before making a call.
Due to the rate of release being fixed at 1/cps no worker can ever exceed the calls-per-second limit. Much simpler than sending Lua over the wire.