Я использую большинство или все ядра для быстрой обработки файлов, это может быть чтение нескольких файлов за раз или использование нескольких ядер для чтения одного файла.
Я бы предпочел использовать несколько ядер для чтения одного файла, прежде чем перемещать его в следующий.
Я попробовал приведенный ниже код, но, похоже, не использовал все ядро.
Следующий код будет в основном получать файл * .txt в каталоге, который содержит htmls, в формате json.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import urlparse
import os
from bs4 import BeautifulSoup
from multiprocessing.dummy import Pool # This is a thread-based Pool
from multiprocessing import cpu_count
def crawlTheHtml(htmlsource):
htmlArray = json.loads(htmlsource)
for eachHtml in htmlArray:
soup = BeautifulSoup(eachHtml['result'], 'html.parser')
if all(['another text to search' not in str(soup),
'text to search' not in str(soup)]):
try:
gd_no = ''
try:
gd_no = soup.find('input', {'id': 'GD_NO'})['value']
except:
pass
r = requests.post('domain api address', data={
'gd_no': gd_no,
})
except:
pass
if __name__ == '__main__':
pool = Pool(cpu_count() * 2)
print(cpu_count())
fileArray = []
for filename in os.listdir(os.getcwd()):
if filename.endswith('.txt'):
fileArray.append(filename)
for file in fileArray:
with open(file, 'r') as myfile:
htmlsource = myfile.read()
results = pool.map(crawlTheHtml(htmlsource), f)
Кроме того, я не уверен, что, f представляют.
Вопрос 1:
Что я не сделал правильно, чтобы полностью использовать все ядра / потоки?
Вопрос 2:
Есть ли лучший способ использовать try: кроме: потому что иногда значение отсутствует на странице и это может привести к остановке скрипта. При работе с несколькими переменными я получу много операторов try & исключением.