### 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
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import os
import pty
import time
import json
import signal
import subprocess
import sys
import termios
import traceback
from ansible import constants as C
from ansible.errors import AnsibleError, AnsibleParserError, AnsibleUndefinedVariable, AnsibleConnectionFailure, AnsibleActionFail, AnsibleActionSkip
from ansible.executor.task_result import TaskResult
from ansible.executor.module_common import get_action_args_with_defaults
from ansible.module_utils.parsing.convert_bool import boolean
from ansible.module_utils.six import binary_type
from ansible.module_utils._text import to_text, to_native
from ansible.module_utils.connection import write_to_file_descriptor
from ansible.playbook.conditional import Conditional
from ansible.playbook.task import Task
from ansible.plugins.loader import become_loader, cliconf_loader, connection_loader, httpapi_loader, netconf_loader, terminal_loader
from ansible.template import Templar
from ansible.utils.collection_loader import AnsibleCollectionConfig, AnsibleCollectionRef
from ansible.utils.listify import listify_lookup_plugin_terms