Эффективная многопроцессорная обработка массива строк - PullRequest
1 голос
/ 02 мая 2019

У меня есть массив строк, которые мне нужно обработать. Поскольку строки могут обрабатываться независимо, я делаю это параллельно:

import multiprocessing
import numpy as np

def func(x):
    ls = ["this", "is"]
    return [i.upper() for i in x.split(' ') if i not in ls]

arr = np.asarray(["this is a test", "this is not a test", "see my good example"])
pool = multiprocessing.Pool(processes=2)
tst = pool.map(func, arr)
pool.close()

У меня следующий вопрос: существуют ли очевидные способы, которыми я могу улучшить свой код с точки зрения сокращения использования памяти и процессорного времени? Такие как

  • Использование numpy-массивов в func?
  • Использование Python-списков вместо numpy-массивов?
  • ...

1 Ответ

1 голос
/ 02 мая 2019

Вы можете использовать numpy frompyfunc для векторизации всего выполнения.Это намного быстрее, чем собственная реализация Python.

import numpy as np
import functools


def func(x):    
    ls = ["this", "is"]
    print( [i.upper() for i in x.split(',') if i not in ls])


x = np.array(["this is a test", "this is not a test", "see my good example"])
np.frompyfunc(func,1,1)(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...