多进程在mySQL中提取和保存数据pool.apply_async()的使用

df_ = pool.apply_async(func=self.select_data_one, args=(table_name, page_no, page_size))应用func函数,args里面放函数的参数

apply_async(self, func, args=(), kwds={}, callback=None,
            error_callback=None):
        '''
        Asynchronous version of `apply()` method.
        '''

问题

df_results 本身就是一个dataframe格式的list
为什么不能直接用concat联结起来
而要使用result.get()

df_results = []
for page_no in range(1, page_num+1):
            df_ = pool.apply_async(func=self.select_data_one, args=
(table_name, page_no, page_size))  #
            df_results.append(df_)
            logger.info('..............进程开始................')
pool.close()
pool.join()
logger.info('..........数据融合.........')
end_result = [result.get() for result in df_results]
end_df = pd.concat(end_result, axis=0, sort=False)

解决方法

由于pool.apply_async() 这方法返回的是结果是值的对象,不是值本身,所以要加get()方法
有点类似groupby后不聚合 不显示,只能用list()才可以显示

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容