Я пытаюсь использовать многопроцессорность для повышения производительности моих вызовов API.
Буду очень признателен за любые советы по этому вопросу.
Ниже приведено общее представление о том, что делает программа, и более подробная информация для ознакомления:
data = pd.read_csv(filename, sep=";", converters={i: str for i in range(0, 156)})
for index, series in data.iterrows():
#
# this is where the api calls and calculations happen
#
data.to_csv(filename, index=False, columns=headers)
ДляВ этом примере я скажу, что фрейм данных выглядит (х 10000 + строк):
data['Client_Code'] = 'ABCD'
data['Mode'] = 'Air'
data['Account_Number'] = 'ABC123'
data['Invoice Number'] = '987654321'
data['Tracking_Number'] = '1357924680'
data['Delivered'] = ''
Пока у меня есть это для создания пула:
num_processes = multiprocessing.cpu_count()
chunk_size = int(data.shape[0]/num_processes)
chunks = [data.loc[data.index[i:i + chunk_size]] for i in range(0, data.shape[0], chunk_size)]
def func(x):
for index, series in x.iterrows():
#simulates api call
x.at[index,'Delivered'] = 'Yes'
print(x['Delivered'])
return x
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=num_processes)
result = pool.map(func, chunks)
pool.close()
pool.join()
print(data['Delivered'])
1) AmЯ собираюсь сделать это правильным (наиболее эффективным) способом?
2) Как я могу получить данные обратно из функции?Так что я могу data.to_csv (имя файла, index = False, столбцы = заголовки)
Оператор печати в функции работает, но один за пределами не.
Спасибо