使用 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)
我有一大堆 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)