Multithreading 如何从线程返回dataframe对象
我以前问过这个问题,但我对我的特殊情况的解释可能不够清楚。我上一个问题的表决结果是重复的 也许我应该多解释一下。我已经阅读并尝试了引用的线程,但我在那里所做的一切似乎都不起作用。我可能只是错误地实现了它 完成所有工作和数据转换的主要类是:Multithreading 如何从线程返回dataframe对象,multithreading,python-3.x,Multithreading,Python 3.x,我以前问过这个问题,但我对我的特殊情况的解释可能不够清楚。我上一个问题的表决结果是重复的 也许我应该多解释一下。我已经阅读并尝试了引用的线程,但我在那里所做的一切似乎都不起作用。我可能只是错误地实现了它 完成所有工作和数据转换的主要类是: class SolrPull(object): def __init__(self, **kwargs): self.var1 = kwargs['var1'] if 'var1' in kwargs else 'this'
class SolrPull(object):
def __init__(self, **kwargs):
self.var1 = kwargs['var1'] if 'var1' in kwargs else 'this'
self.var2 = kwargs['var2'] if 'var2' in kwargs else 'that'
def solr_main(self):
#This is where the main data transformation takes place.
return(self.flattened_df)
我需要创建多个对象,让它们从Solr数据库中提取,并在不同线程中同步转换数据
我的参数必须传递给SolrPull类,而不是solr_主函数
在继续处理之前,我需要等待这些返回
我尝试了参考线程中的两个不同答案,但都不起作用
使用该线程的公认答案,我做到了:
class TierPerf(object):
def pull_current(self):
pool = ThreadPool(processes=5)
CustomerRecv_df_result = pool.apply_async(SolrPull(var1='this', var2='that').solr_main())
APS_df_result = pool.apply_async(SolrPull(var1='this', var2='that').solr_main())
self.CustomerRecv_df = CustomerRecv_df_result.get()
self.APS_df = APS_df_result.get()
但是,拉力和转换并不是同步发生的。
然后,当我执行.get时,会出现错误“DataFrame对象不可调用”
作为最终结果,我需要能够同步调用SolrPull*args.solr_main并返回pandas数据帧,然后将其用于进一步处理。好吧,在经历了所有的挣扎和痛苦之后,我终于在发布这个问题后了解了我的具体情况 我回到原来的解决方案,然后将所需的dataframe self.CustomerRecv_df设置为returndataframes属性CustomerRecv_df.flatted_df
class TierPerf(object):
def pull_current(self):
thread_list = []
CustomerRecv_df = SolrPull(var1='this', var2='that')
tr_CustomerRecv_df = threading.Thread(name='Customerrecev_tier', target=CustomerRecv_df.solr_main)
thread_list.append(tr_CustomerRecv_df)
APS_df = SolrPull(var1='this', var2='other')
tr_APS_df = threading.Thread(name='APS_tier', target=APS_df.solr_main)
thread_list.append(tr_APS_df)
for thread in thread_list:
print('Starting', thread)
thread.start()
for thread in thread_list:
print('Joining', thread)
thread.join()
self.CustomerRecv_df = CustomerRecv_df.flattened_df
self.APS_df = APS_df.flattened_df