Бесстыдный плагин, я написал для этого библиотеку: P https://github.com/houqp/shell.py
Это в основном оболочка для popen и shlex для Теперь. Он также поддерживает команды конвейеров, чтобы упростить цепочку команд в Python. Таким образом, вы можете делать такие вещи, как:
ex('echo hello shell.py') | "awk '{print $2}'"
Вы можете указать количество работников при создании пула.
with Pool(5) as p:
p.map(func, list)
p.close()
p.join()
Обратите внимание, что он не будет работать с теми же 5 файлами одновременно и переместится к следующим 5 файлам по порядку. Но он создает очередь с 5 работниками, и когда работник готов, начинается другой. Это гарантирует, что за один раз будут обрабатываться только 5 файлов.
Используйте 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())
Разрезать совокупность пакетных файлов на куски
Импорт многопроцессорной обработки
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']