
Igor
18.06.2017
18:29:49
ну, т.е., насколько я понял, тогда они будут чанками запускаться по семафору

Nikolay
18.06.2017
18:30:26
Твистед не нужен

Igor
18.06.2017
18:31:09
)))
ну щас-то да, а раньше потребность, я так понимаю, неплохая была. че было, был он и gevent. потом торнадо появился.

Anton
18.06.2017
18:31:12
Твистед не нужен
я не говорил, что нужен, просто это один из старейших каркасов, его можно глянуть для саморазвития

Google

Igor
18.06.2017
18:31:45
я его смотрел, но асинхронщину старался стороной обходить, ибо неведомая хуйня какая-то
а сейчас как-то получше, спасибо большое еще раз

Марк
18.06.2017
18:32:09
ну это вроде семафорами решается
На небольших количествах и без лишних телодвижений все норм. А если скормить async.await 10-20 000 генераторов с коротиной, то лично у меня сначала скриптец "зависает", спамя эти процессы, а потом начинается их обработка.

Nikolay
18.06.2017
18:42:01

Anton
18.06.2017
18:42:45
есть такое, но глянуть стоит, хотя бы чтобы узнать, как делать не надо)))

Valery
18.06.2017
18:44:35
подскажите пожалуйста по DRF, serializer = SnippetSerializer(snippet, data=data) и serializer = SnippetSerializer(data=data), как реализовано что в зависимости от аргументов вызывается в первом случае update метод и во втором create?

Марк
18.06.2017
18:45:07

Anton
18.06.2017
18:45:35
я не утверждал обратного

Марк
18.06.2017
18:46:03
Я, к слову, спросил. Почему именно твистед

Anton
18.06.2017
19:00:59
он просто старый и используется не только для веба

Artem
18.06.2017
19:26:44

Vladimir
18.06.2017
20:54:57
Торнада тоже асинхронная
Там @gen.coroutine есть шоб указывать, что декорируемая функция выполняется асинхронно

Lulz
19.06.2017
06:15:19

Google

Artem
19.06.2017
06:16:27
мета-юмор про contract pattern

Anna
19.06.2017
06:52:57
алоха, питоняши
кто-нить умеет в докер?

Дмитрий
19.06.2017
06:54:43

Anna
19.06.2017
06:54:52
docker-compose up -d

Дмитрий
19.06.2017
06:56:18
А этот порт не занят в системе? Как понимаю он пробрасывается наружу

Anna
19.06.2017
06:57:54
netstat?
netstat -vanp tcp | grep 6379
tcp4 0 0 127.0.0.1.6379 *.* LISTEN 131072 131072 481 0

Igor
19.06.2017
06:59:10
А dockerfile можно?
Блин. Айфон не умеет yml Через 10 мин до работы доберусь.

Anna
19.06.2017
07:01:17
спс

x3233
19.06.2017
07:04:20
а ни у кого нет проблемы с тем, что пайтон долго на винду ставится?


Проксимов
19.06.2017
07:10:16
Documents
```version: '2'
services:
redis-commander:
image: 0x59/redis-commander:latest
ports:
- "8081:8081"
command: --port 8081 --redis-host redis
links:
- redis
depends_on:
- redis
restart: always
redis:
image: redis
ports:
- "127.10.0.1:6379:6379"
restart: always
admin-mongo:
image: 0x59/admin-mongo:latest
ports:
- "8082:8082"
environment:
- PORT=8082
- CONN_NAME=mongo
- DB_HOST=mongo
links:
- mongo
depends_on:
- mongo
restart: always
mongo:
image: mongo
ports:
- "127.10.0.1:27017:27017"
tty: true
restart: always
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mariadb
- PMA_USER=root
- PMA_PASSWORD=djangotestroot
ports:
- 8083:80
volumes:
- /sessions
restart: always
depends_on:
- mariadb
links:
- mariadb
mariadb:
image: mariadb:10
restart: always
environment:
- MYSQL_ROOT_PASSWORD=djangotestroot
- MYSQL_USER=django
- MYSQL_PASSWORD=testpass
- MYSQL_DATABASE=django
ports:
- "127.10.0.1:3306:3306"```


b0g3r
19.06.2017
07:38:09
Насколько контекстная

Евгений
19.06.2017
07:38:42

b0g3r
19.06.2017
07:38:50
пока-то нет, чего ты
у нас презумпция спам-невиновности

Google

Rocket
19.06.2017
07:39:39


Igor
19.06.2017
08:04:40
извиняюсь что так долго. попробуйте этот композ

Евгений
19.06.2017
08:04:56
блин. думал, что годные стикеры, о они говно какое-то. сделали бы на русском нормальные по O'Reilly

Anna
19.06.2017
08:06:35

Igor
19.06.2017
08:07:15
на всякий случай docker-compose rm и потом docker-compose up -d

Anna
19.06.2017
08:09:20
далее можно просто запускать django server?

Igor
19.06.2017
08:10:47
Ну я не знаю что для чего нужно. если это нужно для django, то наверное да, можно запускать

Anna
19.06.2017
08:10:58
спасибо

Igor
19.06.2017
08:11:56
не за что)

Pavel
19.06.2017
08:57:46
У всех гитлаб лежит?

Constantine
19.06.2017
08:57:57
йеп

Igor
19.06.2017
08:58:38

Anton
19.06.2017
08:58:49

Vladimir
19.06.2017
09:01:05
Ребята, привет.
Есть онлайн сервис на питоне+фласк, бд постгрес, внутри сервиса есть система оповещений - вверху показывается количество непрочитанных оповещений + по нажатию сами оповещения. Сейчас и счетчик и сами оповещения выдираются на каждый (!) запрос, что, конечно, стремно.
Подскажите best practices для подобных ситуаций. Думаю складывать счетчик с самими оповещениями в кэш, только не знаю как часть его обновлять, в принципе раз в 5 минут думаю пользователей бы устроило. Например, в месте где нужен каунтер брать его из редиса, если там нет - считать и класть в редис с expriation'ом через 5 минут. + отображение самих оповещений сделать по ajax'у когда пользователь открывает окно с ними.
Есть еще какие-нибудь идеи?


Сергей
19.06.2017
09:03:27
Ребята, привет.
Есть онлайн сервис на питоне+фласк, бд постгрес, внутри сервиса есть система оповещений - вверху показывается количество непрочитанных оповещений + по нажатию сами оповещения. Сейчас и счетчик и сами оповещения выдираются на каждый (!) запрос, что, конечно, стремно.
Подскажите best practices для подобных ситуаций. Думаю складывать счетчик с самими оповещениями в кэш, только не знаю как часть его обновлять, в принципе раз в 5 минут думаю пользователей бы устроило. Например, в месте где нужен каунтер брать его из редиса, если там нет - считать и класть в редис с expriation'ом через 5 минут. + отображение самих оповещений сделать по ajax'у когда пользователь открывает окно с ними.
Есть еще какие-нибудь идеи?
Обновляй кэш вместе с обновлением базы. Добавилось сообщение - cache.set(cache.get('messages_count', 0) + 1).


Vladimir
19.06.2017
09:06:02
как вариант. я боюсь просто редис может захерить ключики, у нас в нем таски от селери хранятся, и он память чистит периодически

Artem
19.06.2017
09:07:44
морда гитлаба не лежит
https://twitter.com/gitlab/status/876560161640525824
мб вас это задело

Google

Admin
ERROR: S client not available

Сергей
19.06.2017
09:08:22
на получение счётчика делаешь просто
if 'messages_count' not in cache:
# Count messages from db and set in cache and return result
else:
return cache.get('messages_count')

Artem
19.06.2017
09:09:06
а, не там такое We will be deploying GitLab EE 9.3.0-rc3, no downtime is expected.

Aleksey
19.06.2017
09:17:55
Добрый день! Скажите пожалуйста, как можно импортировать методы одного пректа (test) pyspider в другой (test2) ? Что бы можно в проекте test2 можно было вызвать методы test?
В офф доке написано: Projects are independent, but you can import another project as a module with "from projects import other_project"
from projects import test as t

Pavel
19.06.2017
09:53:18
Привет, есть функция возвращающая list. Нужно пробежаться с разными параметрами и создать set из элементов всех списков.
Ну типа есть
def f(x):
return [x, x*2, x*3]
я делаю так:
s = set(itertools.chain( *[f(i) for i in range(10)]))
как это сделать красивее

Igor
19.06.2017
10:07:11
Как вариант:
{i for l in [1,5, 10] for i in f(l)}

Artem
19.06.2017
10:08:04
Чейн лучший вариант
Можно и фором пройтись и добавлять в сет
Если много повторяющихся элементов и результатов получается очень много, лучше через цикл.

Igor
19.06.2017
10:14:30
т.е это:
s = {}
for l in list:
for i in f(l):
s.add(i)
лучше?)

b0g3r
19.06.2017
10:15:43

Artyem
19.06.2017
10:16:18

Aleksey
19.06.2017
10:16:34

Artem
19.06.2017
10:16:44
Внешний цикл нужен, чтобы не класть в память все сразу. В этом смысле конечно лучше, у нас же не ленивое вычисление аргументов

Aleksey
19.06.2017
10:16:45

b0g3r
19.06.2017
10:16:52
В каком браузере? Оо

Igor
19.06.2017
10:16:55
Как вариант:
{i for l in [1,5, 10] for i in f(l)}

Google

Igor
19.06.2017
10:17:02
Тоже самое ведь будет в результате

Artem
19.06.2017
10:19:39
Местами поменять только надо внутри, но вот тут я не уверен, не сделается ли оно вначале большим списком
Если не сделается, то да, то же самое

Igor
19.06.2017
10:20:13
А в каком плане местами?

Artem
19.06.2017
10:20:44
for i in f(l) for l in []

Kolyann
19.06.2017
10:20:54
да вроде всё отрабатывает

Igor
19.06.2017
10:21:16
Этот вариант больше всего нравится
s = set(chain.from_iterable(f(i) for i in range(10)))
Проще читается, наверное

Artem
19.06.2017
10:22:05
Да, это лучше всего