Вопрос по сбору данных (Python)
Подскажите, пожалуйста, как поступить при такой ситуации. Или дать направление что читать и куда копать. Существует 3 брокерские базы, которые разными методами, где-то через библиотеки, где-то через вебсокеты собирают одинаковые списки данных по одинаковым объектам. Затем эти данные объединяются и среди одинаковых объектов всех трех баз, проводится сравнение стоимости. Если стоимость объекта на одной из таких баз сильно отличается от двух других, то ее дальнейшее рассмотрение должно идти отдельным потоком.
my_list1 = [[a,1][b,2][c,5][d,6]]
my_list2 = [[a,1][b,1][c,1][d,3]]
my_list3 = [[a,4][b,2][c,3][d,1]]
Дальше идет ряд операций нудных и не интересны и в конце концов получаются некоторые данные в big_list, которые формируются из трех баз my_list. Количество элементов во внутренних списках может меняться. Можно быть только a или наоборот все 4 буквы.
Например:
big_list = [[a,4], [b,2], [...]]
Как мне сделать так, чтобы каждый раз если a равняется определенному значению, запускался отдельный поток функции run_me(a,4), затем также происходило со всеми элементами которые остались.
Что изучать thread?
Ответы (1 шт):
Возможно стоит рассмотреть асинхронный код - asyncio ссылка, concurrent.futures ссылка и ссылка.
Возможный Ваш код:
import concurrent.futures
import asyncio
def something(key, value):
pass
async def common_thing(key, value):
await asyncio.sleep(0)
async def main():
pattern = {'a': 1, 'b': 2, }
big_data = dict([['a', 4], ['b', 2], ])
with concurrent.futures.ThreadPoolExecutor(max_workers=8) as executer:
futures = {
executer.submit(something, key, value)
for key, value in big_data.items()
if pattern.get(key) == value
}
for future in concurrent.futures.as_completed(futures):
result = future.result()
# something with result
tasks = {
asyncio.create_task(common_thing(key, value))
for key, value in big_data.items()
if pattern.get(key) == value
}
for task in asyncio.as_completed(tasks):
result = await task
# something with result
if __name__ == '__main__':
asyncio.run(main())