使用 pool.map 将函数并行应用于字符串列表?

using pool.map to apply function to list of strings in parallel?

我有一大堆 http 用户代理字符串(取自 pandas 数据框),我正尝试使用 ua-parser 的 python 实现来解析这些字符串。我可以在仅使用单个线程时很好地解析列表,但根据一些初步的速度测试,我需要 10 多个小时才能 运行 整个数据集。

我正在尝试使用 pool.map() 来减少处理时间,但似乎不太明白如何让它发挥作用。我已经阅读了大约一打 'tutorials' 我在网上找到并搜索过 SO(可能是某种重复,因为有很多类似的问题),但是 none 的几十次尝试都有出于某种原因工作。我是 assuming/hoping 这很容易解决。

这是我目前的情况:

from ua_parser import user_agent_parser    

http_str = df['user_agents'].tolist()

def uaparse(http_str):
        for i, item in enumerate(http_str):
            return user_agent_parser.Parse(http_str[i])

pool = mp.Pool(processes=10)
parsed = pool.map(uaparse, range(0,len(http_str))

现在我看到以下错误消息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-25-701fbf58d263> in <module>()
      7 
      8 pool = mp.Pool(processes=10)
----> 9 results = pool.map(uaparse, range(0,len(http_str)))

/home/ubuntu/anaconda/lib/python2.7/multiprocessing/pool.pyc in map(self, func, iterable, chunksize)
    249         '''
    250         assert self._state == RUN
--> 251         return self.map_async(func, iterable, chunksize).get()
    252 
    253     def imap(self, func, iterable, chunksize=1):

/home/ubuntu/anaconda/lib/python2.7/multiprocessing/pool.pyc in get(self, timeout)
    565             return self._value
    566         else:
--> 567             raise self._value
    568 
    569     def _set(self, i, obj):

TypeError: 'int' object is not iterable

提前感谢您提供的任何 assistance/direction。

看来你只需要:

http_str = df['user_agents'].tolist()

pool = mp.Pool(processes=10)
parsed = pool.map(user_agent_parser.Parse, http_str)