GearmanClient has a default timeout of -1 you need to set this to a positive number using setTimeout to avoid cases where your script waits forever to run a job even if there are no workers running at all.
(PECL gearman >= 0.6.0)
GearmanClient::setTimeout — Set socket I/O activity timeout
Sets the timeout for socket I/O activity.
An interval of time in milliseconds
Always returns TRUE.