Форум сайта python.su
Всем добрый день
Пишу проект по автоматизации торгов на бирже
Хочу узнать ваше мнение о выбранной мной логике работы программы.
в программе создаю 3 потока используя библеотеку asyncio
поток пользователя
поток сервера
и поток серверного клиента
поток пользователя осуществляет изначальную инициализацию работы сервера.
тут у меня прописаны 2 основные функции
1. регистрация пользователя
При первичном подключении клиента я создаю учетную запись клиента, его сессию, и запускаю 2 задания. Задание на работу сервера и задание на работу серверного клиента. Обмен данными между клиентом и сервером происходит через файлы сессии, а обмен данными между сервером и серверным клиентом происходит через обмен данными между заданиями.
при повторном подключении я провожу идентификацию пользователя и начинаю обмен данными через файлы сессии.
2. обмен данными
я использую 4 файла
В первом файле я храню данные сессии такие как активна сессия или нет время ее создания и время жизни
во втором файле я храню входящие и исходящие данные для клиента
в третьем входящие и исходящие данные для сервера.
в четвертом лог работы сервера какие операции на бирже он совершал
такой подход позволяет продолжить работу сервера и обмен данными с биржевым сервером при отключении клиента, а при повторном подключении восстановить поток данных и просмотреть работу сервера в период когда клиент был отключен.
Хочу услышать ваше мнение о правильности моего подхода и может быть подсказку на более стандартизированные решения.
Всем отписавшимся заранее благодарен
Офлайн
33 человека просмотрело неужели ни у кого нет комментариев ?
Офлайн
Liga
LigaТут непонятно что комментировать. Асинхронность и многопоточность - это принципиально разные способы организации конкурентного исполнения. Разумеется, в каком-то большом комплексном приложении отдельные части могут быть реализованы с использованием разных подходов. Ваш вопрос слишком размытый, чтобы на него можно было что-то конкретное ответить. Давайте применим подход принятый у программистов: разобьем задачу на элементарные составляющие и будем решать каждую по отдельности. Начать можно, например с того, как вы создаете потоки средствами asyncio. Покажите код.
в программе создаю 3 потока используя библеотеку asyncio
Офлайн
Вы правы я запутался терминологии. На самом деле там не потоки а асинхронная передача данных. Вот пример на основе которого я делаю эту передачу.
import asyncio import websockets class transport: async def crec(websocket_s,websocket_c): while True: message = await websocket_c.recv() print("Прием У.С. < "+message) #await counter.mess_count(websocket,message) await transport.ssend(websocket_s,message) async def srec(websocket_s,websocket_c): while True: message = await websocket_s.recv() print("Прием Браузер < "+message) #await counter.mess_count(websocket_c,message) await transport.csend(websocket_c,message) async def ssend(websocket_s,message): d=0 await websocket_s.send(message+str(d)) d=d+1 print("Отправка браузер > "+message) async def csend(websocket_c,message): mess = counter.mess_count(message) await websocket_c.send(mess) print("Отправка У.С. > "+message) class counter: mess_id = 0 def mess_count(message): global mess_id message = "id >"+ str(mess_id) +"-"+ message mess_id = mess_id + 1 return message async def server(websocket_s, path): async with websockets.connect('ws://localhost:8000') as websocket_c: print("Соединение") crec_task = asyncio.ensure_future(transport.crec(websocket_s,websocket_c)) srec_task = asyncio.ensure_future(transport.srec(websocket_s,websocket_c)) print("Ghbdtn") done, pending = await asyncio.wait([crec_task, srec_task], return_when=asyncio.FIRST_COMPLETED,) for task in pending: task.cancel() print("HI") start_server = websockets.serve(server, 'localhost', 8001) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever()
Офлайн
Liga
торгов на бирже
Офлайн
Liga
о чем с вами серьезно говорить если вы тут наполеоновские планы выстроили, но ошиблись с самого начала? я не понимаю.
Вы вот сами выше перечисленное сами осилите? С учетом ваших запросов я сомневаюсь. Я могу ошибаться, и даже было бы здорово если бы конкретно тут я ошибся, но что то мне подсказывает что нет.
Офлайн
evp24binary.com
Офлайн
JOHN_16В чем моя ошибка ?
Ligaо чем с вами серьезно говорить если вы тут наполеоновские планы выстроили, но ошиблись с самого начала? я не понимаю.Вы вот сами выше перечисленное сами осилите? С учетом ваших запросов я сомневаюсь. Я могу ошибаться, и даже было бы здорово если бы конкретно тут я ошибся, но что то мне подсказывает что нет.
Отредактировано Liga (Авг. 3, 2017 01:03:37)
Офлайн
Liga
Офлайн
Liga
Вторая, вторичная - создать инструмент для работы с этим сайтом.
Офлайн