有效地对字符串数组进行多处理

时间:2019-05-02 08:25:23

标签: python arrays string performance multiprocessing

我有一个需要处理的字符串数组。由于字符串可以独立处理,因此我将并行执行此操作:

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()

我的问题如下:在减少内存使用和CPU时间方面,有什么明显的方法可以改善我的代码?如

  • func中使用numpy数组吗?
  • 使用Python列表而不是numpy数组吗?
  • ...?

1 个答案:

答案 0 :(得分:1)

您可以使用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)