Возвращаемое значение функции запуска потока Python - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть pandasDataframes, и я хотел бы применить к нему функцию.Я хотел бы иметь много итераций, поэтому я думаю, что было бы неплохо использовать несколько threads.

Вот как это выглядит:

def my_function(data_inputs_train):

    #..... do something with dataframe....
    #..... group by for loops etc .......
    #..... create new dataframe.....
    return newPandasDataFrame

class myThread (threading.Thread):

   def __init__(self, threadID, data_inputs_train):

      threading.Thread.__init__(self)

      self.threadID = threadID
      self.data_inputs_train = data_inputs_train

   def run(self):
      result_df = my_function(data_inputs_train)

thread1 = myThread(1, data_inputs_train)
thread2 = myThread(2, data_inputs_train)

Таким образом, оба потока должны возвращать новый фрейм данных, и после того, как оба потока завершатся, я хотел бы объединить два результата, которые вернулись из двух потоков.

Как я могу это сделать?Как можно вернуть какой-либо объект из функции run() и как я могу получить к нему доступ в моем объекте thread1?

Спасибо!

ОБНОВЛЕНИЕ при первом ответе, но оно не работает, также есть проблемы с отступами.

class myThread (threading.Thread):

   def __init__(self, threadID, name, sleep, cust_type, data_inputs_train):

      threading.Thread.__init__(self)

      self.threadID = threadID
      self.name = name
      self.sleep = sleep
      self.cust_type = cust_type
      self.data_inputs_train = data_inputs_train
      #here i need to get the newPandasDataFrame object.
      result_df = fdp.optimze_score_and_cl(data_inputs_train)

    def returnTheData(self):
        return result_df

1 Ответ

0 голосов
/ 27 сентября 2019

Итак, это основа вашей программы. Я просто использую пример данных, чтобы показать, как вы можете настроить его.

    def myFunction(x):
       df = pd.DataFrame(['1', '2'], columns = ['A'])
       return df

    class myThreads(threading.Thread):
        def __init__(self, threadID, name, sleep, cust_type, data_inputs_train):
           threading.Thread.__init__(self)
           self.threadID = threadID
           self.name = name
           self.sleep = sleep
           self.cust_type = cust_type

           # call the methods you need on your data...
           self.data_inputs_train = myFunction(data_inputs_train)

         def returnTheData(self):
           return self.data_inputs_train


df = pd.DataFrame(['1'], columns = ['A'])
thread1 = myThreads(1, "EX1", 1, 'EX', df)
thread2 = myThreads(2, "IN1", 2, 'IN', df)
thread1.start()
thread2.start()

thread1.join()
thread2.join()

df1 = thread1.returnTheData()
df2 = thread2.returnTheData()

print(df1)
print(df2)

Вы объявляете свои потоки .. Запустите их и в основном заставьте их выполнитькогда вам захочется ..

join ()

Позволяет основной функции ждать, пока все потоки не завершат свою обработку.

df2 = thread2.returnTheData ()

И вы просто вызываете функцию для возврата нужных вам данных.

Рабочий код

https://repl.it/repls/ClearHugeOutlier

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...