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