### Summary

When ansible(-playbook) iterates over a very large list (3700 items in my case), it hangs after processing the last item, cpu usage goes to 100% and memory usage rises until the process gets killed by linux OOM-killer.

This happens when I enable the `extended` option of `loop_control`, but does not happen on small lists (10 items).

### Issue Type

Bug Report

### Component Name

loop_control

### Ansible Version

```console
$ ansible --version
ansible 2.9.21
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/xxxx/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, May  3 2017, 07:55:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-14)]
```


### Configuration

```console
$ ansible-config dump --only-changed
ANSIBLE_PIPELINING(/home/xxxx/playbooks/ansible.cfg) = True
DEFAULT_BECOME_EXE(/home/xxxx/playbooks/ansible.cfg) = sudo su -
DEFAULT_BECOME_METHOD(/home/xxxx/playbooks/ansible.cfg) = su
DEFAULT_HOST_LIST(/home/xxxx/playbooks/ansible.cfg) = [u'/home/xxxx/playbooks/hosts']
DEFAULT_REMOTE_USER(/home/xxxx/playbooks/ansible.cfg) = ansible
DISPLAY_SKIPPED_HOSTS(/home/xxxx/playbooks/ansible.cfg) = False
```


### OS / Environment

- **OS**: `Red Hat Enterprise Linux Server release 7.4 (Maipo)`
- **CPU**: `Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz`
- **Mem**: `16GB`

### Steps to Reproduce

This is the problematic playbook task:
```yaml
- name: Install network devices configuration files
  template:
    src: telegraf-device.toml.j2
    dest: "{{telegraf_include_dir}}/{{item.hostname}}.conf"
    owner: telegraf
    group: telegraf
  loop: "{{large_list_of_devices}}"
  loop_control:
    index_var: index
    extended: yes
    label: "{{item.hostname}} - {{item.address}}"
  when: true # redacted the condition, not sure if it is relevant
  register: managed_device_configs
  notify: reload telegraf
```


### Expected Results

I expect ansible to be able to iterate over this large list with `extended` enabled and continue to the next task after the last item.

### Actual Results

```console
...
TASK [xxxxx] *********************************************************************************************
ok: [xxxx] => (item=XXXXX - xxx.xxx.xxx.xxx)
ok: [xxxx] => (item=XXXXX - xxx.xxx.xxx.xxx)
....
changed: [xxxx] => (item=XXXXX - xxx.xxx.xxx.xxx)
ok: [xxxx] => (item=XXXXX - xxx.xxx.xxx.xxx)
ok: [xxxx] => (item=XXXXX - xxx.xxx.xxx.xxx)
NOTIFIED HANDLER xxxx for xxxx
Killed
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''
        Runs the task with the loop items specified and collates the result
        into an array named 'results' which is inserted into the final result
        along with the item for which the loop ran.
        '''
        results = []
        
        
        
        task_vars = self._job_vars
        loop_var = 'item'
        index_var = None
        label = None
        loop_pause = 0
        extended = False