Return an infinite iterator over an fsq queue that blocks waiting
       for the queue trigger. Work is yielded as FSQWorkItem objects when
       available, assuming the default generator (FSQScanGenerator) is
       in use.

       Essentially, this function wraps fsq.scan() and blocks for more work.

       It takes all the same parameters as scan(), plus process_once_now,
       which is a boolean to determine if an initial .scan() is run before
       listening to the trigger. This argument defaults to True.

def scan_forever(queue, *args, **kwargs):
    """Return an infinite iterator over an fsq queue that blocks waiting
       for the queue trigger. Work is yielded as FSQWorkItem objects when
       available, assuming the default generator (FSQScanGenerator) is
       in use.

       Essentially, this function wraps fsq.scan() and blocks for more work.

       It takes all the same parameters as scan(), plus process_once_now,
       which is a boolean to determine if an initial .scan() is run before
       listening to the trigger. This argument defaults to True.
    """
    process_once_now = kwargs.get('process_once_now', True)
    if process_once_now:
        for work in scan(queue, *args, **kwargs):
            yield work
    while True:
        with open(fsq_path.trigger(queue), 'rb') as t:
            t.read(1)
        for work in scan(queue, *args, **kwargs):
            yield work