
Sfy
16.11.2018
12:01:50
Я 100% как-то не так подхожу к этому.

Tishka17
16.11.2018
12:02:06
Они не должны блокировать друг друга

Sfy
16.11.2018
12:02:07

Tishka17
16.11.2018
12:02:15
два потока сойдет

Google

Tishka17
16.11.2018
12:02:28
один пересылает в одну сторону, другой в обратную
или можно на asyncio
хотя хз как оно с пайпами

Sfy
16.11.2018
12:02:54
Я не подумал о потоках и о блокировке.
Спасибо.

Slam! 538
16.11.2018
12:10:39
Тут новички задают глупые вопросы или в бегинерсы пишут?

Alex
16.11.2018
12:11:09

Slam! 538
16.11.2018
12:15:06
Ага, нужно поставить бота, который будет при входе ставить новопришедшему РО, выводить инлайн кнопку с ссылкой на бота, где он должен будет пройти тест, если проходит - доступ к чату есть, нет - ссылка на бегинерсы

Aragaer
16.11.2018
12:15:28
я не хочу в бегинерсов

Slam! 538
16.11.2018
12:15:45
Азы, как минимум, должен знать. Я заметил, что число участников этого чата растет быстрее

Aragaer
16.11.2018
12:15:54

Slam! 538
16.11.2018
12:16:03
Потому что он не называется Senior Python

Aragaer
16.11.2018
12:16:33
А можно взять мою yet-another-io-channels-library и там есть готовый Poller, который умеет это все делать

Google

Slam! 538
16.11.2018
12:16:54
Одмен, как идея?

Aragaer
16.11.2018
12:17:48
мне не нравится. Но мое мнение может отличаться от мнения других админов

?? Eugene
16.11.2018
12:18:30
Да глупость, конечно

Тимур
16.11.2018
12:19:02

Slam! 538
16.11.2018
12:19:35

Tishka17
16.11.2018
12:20:06
кстати, а никто не делал бота, который умеет в чате в сообщения с тикетами жиры описания вставлять?

Тимур
16.11.2018
12:20:10
Мы будем стебаться) а между делом может кому и помочь.

Tishka17
16.11.2018
12:20:24
или просто отвечать с краткой инфой о тикете

?? Eugene
16.11.2018
12:20:31
Почему?
Тут и эйчары сидят, и заказчики. Да и новички пусть сидят, жалко что ли
С такими ограничениями чат помрет

Tishka17
16.11.2018
12:21:33
с такими ограничениями тут будут только текстовые редакторы обсуждать

Тимур
16.11.2018
12:21:35

Slam! 538
16.11.2018
12:21:36
+ best of begginers умрет

Tishka17
16.11.2018
12:21:44
просто лень разбиратсья с авторизацией в жире
а сходу не зашло

Тимур
16.11.2018
12:22:06

Tishka17
16.11.2018
12:22:23
ну мне бот нужен, если нет, сам сделаю

Тимур
16.11.2018
12:22:27
Как подключаться к джири с питона, кто делал?

Google

Tishka17
16.11.2018
12:22:35
вопрос что есть

Тимур
16.11.2018
12:22:43
Мне тоже интересно

Tishka17
16.11.2018
12:22:47
нету готового решения - начинаем спрашивать частичные

Alex
16.11.2018
12:23:24
а что там в жире с авторизацией?

Тимур
16.11.2018
12:23:36
Закроют вопрос с джирой. Я тебе на galaxy watch напишу апплик
Или смарт тв

Никита
16.11.2018
12:24:43
Кто нибудь может обьяснить поведение банального куска кода:
x = 50044
y = 50044
print(id(x))
print(id(y))
Везде читал что для значений от -5 до 256 существует преалоцированный массив, по этому вызов id() на одно из этих значений выдаст одинаковый адресс.
Берем значения вне этого диапазона, как в примере выше
Если мы запускаем через косноль питоновскую, выдает разные айдишники, как по матчасти. Если запускать программу через интепритатор, выдает одинаковые айдишники. Как понимать?

Likanov
16.11.2018
12:25:19
Так ребят, как, при переопределении save() в django, проверить создается новый объект или изменяется старый? По pk?

Denis
16.11.2018
12:31:14
Друзья подскажите самые оптимальные решения задачи. ЕСТь бд в нее приходят даныне из нескольких источников у данных есть пара статусов. И эти данные необходимо рассылать через сторонний сервис через пост запросы, в ответ на пост запросы сервисы прислыают ответы которые меняют статус данных. И в зависимости от статуса меняет сами пост запросы, т.е. Приходит штука в одном состоянии уходит в рассылку, там какой то ответ, она тут же меняется и снова делает рассылку измененную. До этого у меня был реализован бесконечный цикл который проверял БД. Но это плохйо метод. База сидит на сервер линукса. Частота с которйо проверяется база критичный показатель. ЧТо можете посоветовать? Через некоторое время еще сервис подключу который будет взаимодействовать с данными.

nnm
16.11.2018
12:36:16
частичная репликация?
и пара ивентов?


LighteR
16.11.2018
12:39:46
Тут сегодня набрасывали, что в php type hinting сделан лучше чем в питоне. Решил глянуть как там вообще сделано. В итоге все что можно указать в тайпхинте это вот: http://php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration.types
Generic'ов нет вообще. Соответственно указываешь, например, array $list, но указать какого типа данные в этом array никак нельзя. Указываешь callable $callback, а сигнатуру этого callback'а указать нельзя.
Плюс там есть забавные оговорки
Псевдонимы для вышеперечисленных скалярных типов не поддерживаются. Вместо этого они рассматриваются как имена классов или интерфейсов. К примеру, используя boolean как параметр или возвращаемое значение, потребует, чтобы эти аргумент или возвращаемое значение были instanceof класса или интерфейса boolean, а не типа bool
Похоже, что в интерпретаторе это было сделано какими-то костылями и хардкодом.
return type'а похоже нет


BlackAndOrange
16.11.2018
12:42:45
Помогите тупому
aiohttp требует, чтобы
1. Сессия создавалась в корутине
2. Создавалась одна сессия на много реквестов
Мне нужен класс, асинхронный метод которого отправляет запрос. Вопрос: где мне создавать сессию? В конструкторе нельзя — это не корутина, да и непонятно где её тогда закрывать. Непосредственно в методе нельзя — придётся создавать по сессии на каждый реквест.

LighteR
16.11.2018
12:43:32
Ну, в целом, я не очень удивлен, что в php убого сделали. Удивительны люди серьезно заявляющие, что тапхинты в питоне - говно, посмотрите как сделано в php, там збс

BlackAndOrange
16.11.2018
12:43:43
В документации везде async with, но не могу же я весь класс в async with засунуть

Alex
16.11.2018
12:45:07

BlackAndOrange
16.11.2018
12:45:31

Alex
16.11.2018
12:46:10
Ну передавай просто экземпляру сессию в конструкторе

Google

BlackAndOrange
16.11.2018
12:46:34
Не могу, интерфейс класса фиксирован.
Потому что через классы с такими же интерфейсами отправляются смски и ещё куча всего делается

Alex
16.11.2018
12:47:41
А кваргсов у конструктора нет?

Cykooz
16.11.2018
12:49:27

Tigran
16.11.2018
12:49:34

BlackAndOrange
16.11.2018
12:49:49
Могут быть, но они приходят из текстового конфига, заставить внешний код создавать ажно целую сессию нельзя.
Условно, там происходит вот что:
for supplier, supplier_cfg in config['suppliers'].items():
self.suppliers.append(supplier(**supplier_cfg))
^ документация aiohttp

Cykooz
16.11.2018
12:50:58
Перформанс
Ну мало ли что в документации - у тебя именно за счёт чего будет "перфоманс"?

Alex
16.11.2018
12:51:17
Можешь в конструкторе вызвать метод создания в loop.run_until_ complete

BlackAndOrange
16.11.2018
12:51:24

Cykooz
16.11.2018
12:51:40
Ок, это весская причина

BlackAndOrange
16.11.2018
12:53:28
Т. е. это не я не вижу способа создать сессию для класса, это его принципиально нет?
Окей, тогда другой вопрос.
Зачем закрывать aiohttp-сессию? Что может произойти плохого, если этого не сделать? Сфейлится последний реквест?

Cykooz
16.11.2018
12:53:44
Тогда, если нельзя менять внешний код, который вызывает методы класса, то - создавать сессию в момент первого вызова, сохранять её в какое-то поле объекта и далее использовать во всех остальных вызовах (это вот та самая мемоизация про которую выше писали)
С закрыванием сессии конечно "ах", это потребует изменение вызывающего кода

Alex
16.11.2018
12:55:16
Странно, что у твоего интерфейса не предусмотрен метод, который убирается за собой после работы

BlackAndOrange
16.11.2018
12:55:57

LighteR
16.11.2018
12:56:01

BlackAndOrange
16.11.2018
12:56:15
На создание вне корутины

Google

BlackAndOrange
16.11.2018
12:56:37
И говорит, что это very dangerous idea

Alex
16.11.2018
12:57:13
Вызови корутину в конструкторе через run_until_complete

BlackAndOrange
16.11.2018
12:57:48

Alex
16.11.2018
12:58:16
Ну у сессии надо вызвать метод закрытия
?

Cykooz
16.11.2018
12:58:59
Если же можно что то изменить "снаружи", то правильнее сделать через асинхронный контекстный менеджер, что бы вот так оно работало:
async with Foo() as foo:
await foo.send_request()
await foo.send_request()
await foo.send_request()
...

BlackAndOrange
16.11.2018
12:59:34

Cykooz
16.11.2018
12:59:38
В этом случае в Foo.__aenter__ создаёшь сессию, а в Foo.__aexit__ закрываешь её

LighteR
16.11.2018
13:01:50
Если loop туда явно передать, то будет работать
import asyncio
import aiohttp
session = aiohttp.ClientSession(loop=asyncio.get_event_loop())
class Foo:
async def get(self):
async with session as s:
async with s.get('http://httpbin.org/get') as resp:
print(resp.status)
asyncio.get_event_loop().run_until_complete(Foo().get())

BlackAndOrange
16.11.2018
13:07:11

LighteR
16.11.2018
13:08:09

BlackAndOrange
16.11.2018
13:08:34
Ну да, ясно
Он не рейзит ошибку у меня, просто даёт warning и фоллбэкается к get_event_loop()

LighteR
16.11.2018
13:09:22
но в любом случае он как бы предостерегает тебя

oj_gen
16.11.2018
13:13:19
А что из стандартной библиотеки представляет реальный Список (структуру данных)? Нужно что-то, что умеет удалять из середины за O(1).