Найти - Пользователи
Полная версия: Помогите с логикой реализации проекта и ваше мнение о библиотеке asyncio
Начало » Python для новичков » Помогите с логикой реализации проекта и ваше мнение о библиотеке asyncio
1 2
Liga
Всем добрый день
Пишу проект по автоматизации торгов на бирже
Хочу узнать ваше мнение о выбранной мной логике работы программы.

в программе создаю 3 потока используя библеотеку asyncio

поток пользователя
поток сервера
и поток серверного клиента

поток пользователя осуществляет изначальную инициализацию работы сервера.
тут у меня прописаны 2 основные функции
1. регистрация пользователя
При первичном подключении клиента я создаю учетную запись клиента, его сессию, и запускаю 2 задания. Задание на работу сервера и задание на работу серверного клиента. Обмен данными между клиентом и сервером происходит через файлы сессии, а обмен данными между сервером и серверным клиентом происходит через обмен данными между заданиями.
при повторном подключении я провожу идентификацию пользователя и начинаю обмен данными через файлы сессии.

2. обмен данными
я использую 4 файла
В первом файле я храню данные сессии такие как активна сессия или нет время ее создания и время жизни
во втором файле я храню входящие и исходящие данные для клиента
в третьем входящие и исходящие данные для сервера.
в четвертом лог работы сервера какие операции на бирже он совершал

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

Хочу услышать ваше мнение о правильности моего подхода и может быть подсказку на более стандартизированные решения.
Всем отписавшимся заранее благодарен
Liga
33 человека просмотрело неужели ни у кого нет комментариев ?
FishHook
Liga
Liga
в программе создаю 3 потока используя библеотеку asyncio
Тут непонятно что комментировать. Асинхронность и многопоточность - это принципиально разные способы организации конкурентного исполнения. Разумеется, в каком-то большом комплексном приложении отдельные части могут быть реализованы с использованием разных подходов. Ваш вопрос слишком размытый, чтобы на него можно было что-то конкретное ответить. Давайте применим подход принятый у программистов: разобьем задачу на элементарные составляющие и будем решать каждую по отдельности. Начать можно, например с того, как вы создаете потоки средствами asyncio. Покажите код.
Liga
Вы правы я запутался терминологии. На самом деле там не потоки а асинхронная передача данных. Вот пример на основе которого я делаю эту передачу.

 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()
evp24
Liga
торгов на бирже

Какой бирже?
JOHN_16
Liga
о чем с вами серьезно говорить если вы тут наполеоновские планы выстроили, но ошиблись с самого начала? я не понимаю.
Вы вот сами выше перечисленное сами осилите? С учетом ваших запросов я сомневаюсь. Я могу ошибаться, и даже было бы здорово если бы конкретно тут я ошибся, но что то мне подсказывает что нет.
Liga
evp24
binary.com
Liga
JOHN_16
Ligaо чем с вами серьезно говорить если вы тут наполеоновские планы выстроили, но ошиблись с самого начала? я не понимаю.Вы вот сами выше перечисленное сами осилите? С учетом ваших запросов я сомневаюсь. Я могу ошибаться, и даже было бы здорово если бы конкретно тут я ошибся, но что то мне подсказывает что нет.
В чем моя ошибка ?
Никаких наполеоновских планов я тут не вижу. Вполне обычная задача. Да писать много но реализуя этот проект я хочу научиться писать различные приложения. Что тут непосильного? Я уже реализовал регистрацию пользователей и сессий, а также работу с их модификацией, регистрацию ключей для сайта и регистрацию новых сессий. На данный момент работу над сервером пока отложил так как уже необходим интерфейс работы с сервером. Запросов уже много становиться. Сейчас изучаю html5, jsscript, jquery, Google Charts и basis.js хочу написать SPA интерфейс. Вот первые наброски http://mywebexperience.ru/. Правая и нижняя панели тянуться, а также все панели скрываются. Постараюсь сегодня научиться работать с local storage. Буду писать туда как параметры сессии так и настройки интерфейса. Так что дело потихоньку двигается, опыт набирается, знания накапливаются. Просто хочется услышать мнение профессионалов о верности моего движения и возможно подсказки. Не хочется огород городить если есть стандартизированные решения возникающих задач.
evp24
Liga

с бинарниками лучше не связываться.
В любом случае, даже если будет СТАКАН из FX
вы не сможете отследить движение в + или -
поскольку в бинарниках, как в казино, “движение” идет с учетом баланса и общего “результата работы”
именно ИГРАЮЩЕГО а не работающего аккаунта

в большинстве случаев.
evp24
Liga
Вторая, вторичная - создать инструмент для работы с этим сайтом.

первая, вполне понятна. Втора, какой в ней смысл, если логика работы меняется минимум 1 раз в 2-3 месяца? ))

Но это становится очевидным потом, когда напишешь приложение, пройдет 2-3 месяца и…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB