Make consumer check threaded to prevent wedge state

This moves the consumer process check and creation out into a timed thread. It allows the producer to end up in a wedged state (attempting to push to a full queue causing a block) and still be able to start the consumer process if it dies for some reason instead of remaining in a frozen state.