
Даниил
16.04.2017
16:45:37
я могу в своего бота портировать этот калькулятор (с твоей лицензией в заголовке файла)

Denis
16.04.2017
16:47:14
Там слишком специфический калькулятор

Даниил
16.04.2017
16:47:26
Ну я знаю)

Denis
16.04.2017
16:47:33
Большая часть кода - минимизация числа ложных срабатываний

Google

Даниил
16.04.2017
16:48:52
В компилируемых языках либо парсер писать, либо библиотеки использовать
Я надеюсь для своего нового бота библиотеки найти все-таки

Denis
16.04.2017
16:49:19
Если у тебя только арифметика и простые функции, руками проще

Даниил
16.04.2017
16:49:21
Ну или можно lua например использовать

Denis
16.04.2017
16:49:55
На тему разбора выражений у меня соседний репозиторий

Даниил
16.04.2017
16:52:28

Denis
16.04.2017
16:53:36
calc.py или другой?

Даниил
16.04.2017
16:53:55
Который другой репозиторий

Скрудж
16.04.2017
16:57:05

Denis
16.04.2017
16:57:14
Ты вообще кто

Скрудж
16.04.2017
16:57:37

Denis
16.04.2017
16:57:38

Даниил
16.04.2017
16:57:57

Google

Denis
16.04.2017
16:58:21
https://github.com/kalinochkind/matrix-calculator/blob/master/src/parser.cpp
Удачи
И в main.cpp тоже кусок

Даниил
16.04.2017
16:58:39
А, понял)
Лучше буду всякие готовые врапперы юзать

Rocky
16.04.2017
17:47:08

Игорь
16.04.2017
17:48:08
как это?
покупаешь коробочную версию антивиря, потом его обходишь

Rocky
16.04.2017
17:48:26

Игорь
16.04.2017
17:49:35
а что еще подробней. кладешь на пол, и обходишь его по кругу

Rocky
16.04.2017
17:58:54

Проксимов
16.04.2017
18:03:19

Маришка
16.04.2017
18:11:49
Такс товарищи, мне нужно в асихронном лупе посмотреть работает ли корутина
Я что то накопала и докапалась до asyncio.Task().all_tasks()
Лишь
А дальше я не знаю как сравнить запущенную корутину с нужной корутиной

Nikolay
16.04.2017
18:15:02
по-хорошему надо не так
а можно сделать семафор на одну корутину
и запускать через него, это гарантирует, что будет один инстанс

Маришка
16.04.2017
18:15:34

Nikolay
16.04.2017
18:15:45
https://docs.python.org/3/library/asyncio-sync.html
ну, потому что есть примитивы синхронизации стандартные :)

Google

Маришка
16.04.2017
18:18:06
Такс, тогда можно поподробнее про семафор который в asyncio
?

Nikolay
16.04.2017
18:20:01
ну я ж скинул ссылку на доку
там расписано
я не уверен, что тебе нужен именно семафор, но точно примитив, который отследит, что запущен ровно один экземпляр
хотя погоди, может, я вообще не в ту степь
тупой вопрос - при добавлении одной корутины в луп два раза она вообще добавляется второй раз?
никогда не пробовал :)

Маришка
16.04.2017
18:22:50
Будет две таски
Meh

Маришка
16.04.2017
18:24:16
Бесит

CthUlhUzzz
16.04.2017
18:26:22
Нужно только один раз запустить?

Маришка
16.04.2017
18:27:02

Nikolay
16.04.2017
18:27:16
слушай, ну оно работает и так, как ты описала
In [3]: async def foo():
...: await asyncio.sleep(2)
...: return
...:
In [4]: loop = asyncio.get_event_loop()
In [5]: asyncio.ensure_future(foo())
Out[5]: <Task pending coro=<foo() running at <ipython-input-3-f033a73cac3d>:1>>
In [6]: asyncio.Task.all_tasks()
Out[6]: {<Task pending coro=<foo() running at <ipython-input-3-f033a73cac3d>:1>>}
In [7]: task = asyncio.ensure_future(foo())
In [8]: asyncio.Task.all_tasks()
Out[8]:
{<Task pending coro=<foo() running at <ipython-input-3-f033a73cac3d>:1>>,
<Task pending coro=<foo() running at <ipython-input-3-f033a73cac3d>:1>>}
In [9]: task in asyncio.Task.all_tasks()
Out[9]: True
можно просто проверить, есть ли объеки в лупе

Маришка
16.04.2017
18:27:55
ensure_future что делает еще раз можно? :D

Google

Nikolay
16.04.2017
18:28:49

Маришка
16.04.2017
18:29:24
Ааа
Не, все равно пока что не очень

CthUlhUzzz
16.04.2017
18:30:08
Я для отслеживания тасков делаю отдельный список в котором указатели на эти таски. И они чюсами себ оттуда удаляют по завершении

Маришка
16.04.2017
18:30:16
Понятно

Nikolay
16.04.2017
18:30:25

Маришка
16.04.2017
18:30:40
Коду
Точнее

Admin
ERROR: S client not available

Маришка
16.04.2017
18:33:16
Т.е. я провожу проверку есть ли корутина в лупе, но опять же как это сделать?)
Еще до того как я её запустила

Nikolay
16.04.2017
18:33:40
давай из задачи исходить
зачем тебе эта проверка вообще?

Маришка
16.04.2017
18:33:52

Nikolay
16.04.2017
18:33:57
чтобы проверить, надо ли делать отсрочку на 15 секунд? :)

Маришка
16.04.2017
18:34:16

Nikolay
16.04.2017
18:35:18

Маришка
16.04.2017
18:35:33
:D

Google

Nikolay
16.04.2017
18:36:07
как устроен коллбэк на заход пользователя?
это корутина же?
ага, глянул на код, понял

Маришка
16.04.2017
18:39:18
Я в поезде дописала
Дойду до общаги и запушу изменения, тогда точно будет понятно где я хочу это проверять
В корутине handle мы проверяем если человек зашел, если да то составляем имя или юзернейм и потом создаем таск корутины welcome_user
В корутине welcome user я естественно жду если еще юзвери добавятся
А и еще в handle перед созданием таски я пихаю юзернейм в асинхронную очередь
Которую объявила глобальной

Nikolay
16.04.2017
18:43:14
ну, как минимум ты можешь делать как-то так:
async def welcome_user(username, msg_id, chat_id, wait_for=0):
await asyncio.sleep(wait_for)
....
async def handle(msg):
welcome_tasks = []
wait_for_welcome = 0
if foo:
if welcome_tasks:
wait_for = 15
welcome_tasks.append(ensure_future(welcome_user(*args, wait_for=wait_for)))
даже будет лучше, если welcome_tasks заменить на очередь, например
просто будешь проверять, если очередь пустая - пихаем таску в очередь, а если не пустая - то пихаем с таймаутом

Маришка
16.04.2017
18:47:13
Сложна, дай я запушу изменения и ты еще раз посмотришь

Игорь
16.04.2017
18:57:25

CthUlhUzzz
16.04.2017
19:08:41
Кто регистрацию делал, как проверяли email в базе?
Там по стандарту они могут быть очень разные
Вплоть до "Vasya Pupkin"@ya.ru

Проксимов
16.04.2017
19:10:03
Отправляй письмо

CthUlhUzzz
16.04.2017
19:10:36
Письмо-то понятно

Александр
16.04.2017
19:11:18
а зачем еще как то валидировать?

Проксимов
16.04.2017
19:11:23