多进程在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()才可以显示

你可能感兴趣的:(多进程在mySQL中提取和保存数据pool.apply_async()的使用)