Мой поток кода выглядит примерно так:
import pandas as pd
import threading
import helpers
for file in files:
df_full = pd.read_csv(file, chunksize=500000)
for df in df_full:
df_ready = prepare_df(df)
# testing if the previous instance is running
if isinstance(upload_thread, threading.Thread):
if upload_thread.isAlive():
print('waiting for the last upload op to finish')
upload_thread.join()
# starts the upload in another thread, so the loop can continue on the next chunk
upload_thread = threading.Thread(target=helpers.uploading, kwargs=kwargs)
upload_thread.start()
Это работает, проблема в том, что запуск его с многопоточностью замедляет его!
Моя идея потока кода:
обработать порцию данных
после того, как она будет завершена, загрузить ее на фон
во время загрузки,перейти к следующему шагу, то есть к обработке следующего куска данных
Теоретически звучит замечательно, но после большого количества испытаний и синхронизации я считаю, что многопоточность замедляетсяпоток кода.
Я уверен, что что-то напутал, пожалуйста, помогите мне узнать, что это такое.
Также эта функция 'helpers.uploading' возвращает мне важные результаты.Как я могу получить доступ к этим результатам?В идеале мне нужно добавить результат каждой итерации в список результатов.Без потоков это было бы что-то вроде:
import pandas as pd
import helpers
results = []
for file in files:
df_full = pd.read_csv(file, chunksize=500000)
for df in df_full:
df_ready = prepare_df(df)
result = helpers.uploading(**kwargs)
results.append(result)
Спасибо!