Исправление "AttributeError: объект 'str' не имеет атрибута 'close'" при многопоточности из файла? - PullRequest
0 голосов
/ 11 мая 2019

Получение AttributeError: у объекта 'str' нет атрибута 'close'

Пробный закрывающий файл (все еще в коде ниже), перекодированный дважды.

import urllib2
import csv
import lxml
from bs4 import BeautifulSoup
from multiprocessing.dummy import Pool  # This is a thread-based Pool
from multiprocessing import cpu_count
placeHolder = []

def crawlToCSV(URLrecord):
    try:
        OpenSomeSiteURL = urllib2.urlopen(URLrecord).read()
        Soup_SomeSite = BeautifulSoup(OpenSomeSiteURL, "lxml")
        OpenSomeSiteURL.close()
        tbodyTags = Soup_SomeSite.find("title")
    except urllib2.URLError:
        print (URLrecord.rstrip() + " -- Error")
        Soup_SomeSite = ""
        OpenSomeSiteURL = ""


if __name__ == "__main__":
    fileName = raw_input()
    pool = Pool(cpu_count() * 2)  # Creates a Pool with cpu_count * 2 threads.
    with open(fileName, "rb") as f:
        results = pool.map(crawlToCSV, f) # results is a list of all the placeHolder lists returned from each call to crawlToCSV
        f.close()

Также извините за плохое кодирование, впервые с многопоточностью Python, я допустил много ошибок.

Сейчас пытаемся запустить его без ошибок при принятии URL-адресов.

  File "test.py", line 26, in <module>
    results = pool.map(crawlToCSV, f) # results is a list of all the placeHolder lists returned from each call to crawlToCSV
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 253, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 572, in get
    raise self._value
AttributeError: 'str' object has no attribute 'close'
...