我有一个很大的http用户代理字符串列表(取自pandas数据帧)我试图使用ua-parser的python实现解析。我只能使用单个线程解析列表,但基于一些初步的速度测试,我需要花费10个多小时来运行整个数据集。
我正在尝试使用pool.map()
来缩短处理时间,但似乎无法弄清楚如何让它发挥作用。我已经阅读了十几个教程'我在网上发现并搜索了SO(可能是某种类似的重复,因为有很多类似的问题),但是数十次尝试都没有因某种原因而起作用。我假设/希望它很容易解决。
这是我到目前为止所做的:
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
提前感谢您提供的任何帮助/指示。
答案 0 :(得分:1)
您似乎只需要:
http_str = df['user_agents'].tolist()
pool = mp.Pool(processes=10)
parsed = pool.map(user_agent_parser.Parse, http_str)