Как запустить пакетную обработку 5 файлов одновременно, а затем продолжить со следующими 5 файлами, которые находятся в списке?

Бесстыдный плагин, я написал для этого библиотеку: P https://github.com/houqp/shell.py

Это в основном оболочка для popen и shlex для Теперь. Он также поддерживает команды конвейеров, чтобы упростить цепочку команд в Python. Таким образом, вы можете делать такие вещи, как:

ex('echo hello shell.py') | "awk '{print $2}'"

0
задан ColleenB 4 March 2019 в 16:40
поделиться

3 ответа

Вы можете указать количество работников при создании пула.

with Pool(5) as p:
        p.map(func, list)
        p.close()
        p.join()

Обратите внимание, что он не будет работать с теми же 5 файлами одновременно и переместится к следующим 5 файлам по порядку. Но он создает очередь с 5 работниками, и когда работник готов, начинается другой. Это гарантирует, что за один раз будут обрабатываться только 5 файлов.

0
ответ дан Mouna Ben Chamekh 4 March 2019 в 16:40
поделиться

Используйте multiprocessing. Например, для чтения CSVs, названного как file1.csv, file2.csv и т.д .:

import multiprocessing

output=[]
data = range(0,len(files))

def f(x):
    pd.read_csv(file_name+x+'.csv')

def mp_handler():
    p = multiprocessing.Pool(64)
    r=p.map(f, data)
    return r

if __name__ == '__main__':
    output.append(mp_handler())
0
ответ дан Rubens_Zimbres 4 March 2019 в 16:40
поделиться

Разрезать совокупность пакетных файлов на куски

Импорт многопроцессорной обработки

def handle_batch_file(file_name):
    # dummy code
    # print(file_name)
    return file_name


BATCH_SIZE = 5

BATCH_FILES = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']


def main():
    p = multiprocessing.Pool(BATCH_SIZE)
    counter = 0
    while True:
        sub_list = BATCH_FILES[counter * BATCH_SIZE: (counter + 1) * BATCH_SIZE]
        print('Calling "map" with sub list {}'.format(sub_list))
        dummy_results = p.map(handle_batch_file, sub_list)
        if len(BATCH_FILES) <= (counter + 1) * BATCH_SIZE:
            break
        counter += 1


if __name__ == "__main__":
    main()

Выход

Calling "map" with sub list ['a', 'b', 'c', 'd', 'e']
Calling "map" with sub list ['f', 'g', 'h', 'i', 'j']
Calling "map" with sub list ['k', 'l', 'm', 'n']
0
ответ дан balderman 4 March 2019 в 16:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: