def main()

in service/azservice/__main__.py [0:0]


def main():
    timings = False
    start = time.time()
    initialize()
    if timings: print('initialize {} s'.format(time.time() - start), file=stderr)

    start = time.time()
    command_table = load_command_table()
    if timings: print('load_command_table {} s'.format(time.time() - start), file=stderr)

    start = time.time()
    group_index = get_group_index(command_table)
    if timings: print('get_group_index {} s'.format(time.time() - start), file=stderr)

    start = time.time()
    snippets = get_snippets(command_table) if AUTOMATIC_SNIPPETS_ENABLED else []
    if timings: print('get_snippets {} s'.format(time.time() - start), file=stderr)

    def enqueue_output(input, queue):
        for line in iter(input.readline, b''):
            queue.put(line)

    queue = Queue()
    thread = Thread(target=enqueue_output, args=(stdin, queue))
    thread.daemon = True
    thread.start()

    bkg_start = time.time()
    keep_loading = True
    while True:

        if keep_loading:
            keep_loading = load_arguments(command_table, 10)
            if not keep_loading and timings: print('load_arguments {} s'.format(time.time() - bkg_start), file=stderr)

        try:
            line = queue.get_nowait() if keep_loading else queue.get()
        except Empty:
            continue
        
        start = time.time()
        request = json.loads(line)
        response_data = None
        if request['data'].get('request') == 'status':
            response_data = get_status()
            if timings: print('get_status {} s'.format(time.time() - start), file=stderr)
        elif request['data'].get('request') == 'hover':
            response_data = get_hover_text(group_index, command_table, request['data']['command'])
            if timings: print('get_hover_text {} s'.format(time.time() - start), file=stderr)
        else:
            response_data = get_completions(group_index, command_table, snippets, request['data'], True)
            if timings: print('get_completions {} s'.format(time.time() - start), file=stderr)
        response = {
            'sequence': request['sequence'],
            'data': response_data
        }
        output = json.dumps(response)
        stdout.write(output + '\n')
        stdout.flush()
        stderr.flush()