Есть ли лучший способ сделать этот вложенный цикл с многопроцессорностью? - PullRequest
0 голосов
/ 29 октября 2019

Проблема в том, что у меня есть 4 файла, которые мне нужно просмотреть, чтобы найти совпадения в списке из 400 000 строк. Каждый файл содержит около 1 миллиона + строк.

Без использования multiprocess.Pool для завершения потребовалось 14 дней, для этого потребуется 7.

Сначала я сравниваю список с файлами напрямую, но с Пулом. map () не работал с файлом, и я подумал, чтобы сохранить в список и попробовать сравнение списка со списком. Это было принято, но я чувствую, что можно сделать еще больше улучшений ...

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

Заранее спасибо!

def writeToList(listOfNumbers):
    global ebcfilename
    ebcpath = os.path.expanduser(dirpath + "/all_ebc")
    ebcfiles = os.listdir(ebcpath)
    listOfLines = []

    p = Pool()

    for f in ebcfiles:
        ebcfile = open(os.path.join(ebcpath, f), 'r')
        ebcfilename = os.path.basename(ebcfile.name)
        for line in ebcfile:
            line = line.rstrip('\n')
            listOfLines.append([line])
        ebcfile.close()
        print(ebcfilename + ' sent!')
        masterList = [listOfLines, listOfNumbers]

        p.apply(searchCSV(masterList))

    p.close()
    p.join()


def searchCSV(masterList):
    results = []
    for elements in masterList[1]:
        elementstring1 = ''.join(elements)
        elementstring = ''.join(elementstring1.split())
        for lines in masterList[0]:
            linestring = ''.join(lines)
            if linestring.startswith('ALL'):
                continue
            print(linestring)
            for x in range(len(elementstring) - 1):
                print(',' + elementstring[:(len(elementstring)-x)] + ',')
                if (',' + elementstring[:(len(elementstring)-x)] + ',') in linestring:
                    results.append([elementstring[:(len(elementstring)-x)], linestring])
                    print(elementstring[:(len(elementstring)-x)], linestring)
                    break
    print(results)
    # writeToFile(results)

Результаты, например: (элемент поиска) (соответствует из файла) '1189011' 'IP49,1189011,546'

поэтому он соответствует среднему биту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...