diff --git a/Lib/configparser.py b/Lib/configparser.py
index 1bfdac8..edef4f8 100644
--- a/Lib/configparser.py
+++ b/Lib/configparser.py
@@ -694,10 +694,10 @@
     def read_file(self, f, source=None):
         """Like read() but the argument must be a file-like object.
 
-        The `f' argument must have a `readline' method.  Optional second
-        argument is the `source' specifying the name of the file being read. If
-        not given, it is taken from f.name. If `f' has no `name' attribute,
-        `<???>' is used.
+        The `f' argument must be iterable, returning one line at a time.
+        Optional second argument is the `source' specifying the name of the
+        file being read. If not given, it is taken from f.name. If `f' has no
+        `name' attribute, `<???>' is used.
         """
         if source is None:
             try:
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index f7d9a26..a29da93 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -1235,6 +1235,59 @@
                     del section[default]
         return cf_copy
 
+
+class FakeFile:
+    def __init__(self):
+        file_path = support.findfile("cfgparser.1")
+        with open(file_path) as f:
+            self.lines = f.readlines()
+            self.lines.reverse()
+
+    def readline(self):
+        if len(self.lines):
+            return self.lines.pop()
+        return ''
+
+
+def readline_generator(f):
+    """As advised in Doc/library/configparser.rst."""
+    line = f.readline()
+    while line != '':
+        yield line
+        line = f.readline()
+
+
+class ReadFileTestCase(unittest.TestCase):
+    def test_file(self):
+        file_path = support.findfile("cfgparser.1")
+        parser = configparser.ConfigParser()
+        with open(file_path) as f:
+            parser.read_file(f)
+        self.assertTrue("Foo Bar" in parser)
+        self.assertTrue("foo" in parser["Foo Bar"])
+        self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
+
+    def test_iterable(self):
+        lines = textwrap.dedent("""
+        [Foo Bar]
+        foo=newbar""").strip().split('\n')
+        parser = configparser.ConfigParser()
+        parser.read_file(lines)
+        self.assertTrue("Foo Bar" in parser)
+        self.assertTrue("foo" in parser["Foo Bar"])
+        self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
+
+    def test_readline_generator(self):
+        """Issue #11670."""
+        parser = configparser.ConfigParser()
+        with self.assertRaises(TypeError):
+            parser.read_file(FakeFile())
+        parser.read_file(readline_generator(FakeFile()))
+        self.assertTrue("Foo Bar" in parser)
+        self.assertTrue("foo" in parser["Foo Bar"])
+        self.assertEqual(parser["Foo Bar"]["foo"], "newbar")
+
+
 class CoverageOneHundredTestCase(unittest.TestCase):
     """Covers edge cases in the codebase."""
 
@@ -1338,5 +1391,6 @@
         CompatibleTestCase,
         CopyTestCase,
         ConfigParserTestCaseNonStandardDefaultSection,
+        ReadFileTestCase,
         CoverageOneHundredTestCase,
         )
