
Dmitry
25.05.2016
11:16:00
Если бы у тебя было
def print_hello(name=''):
, то примерно так:
from celery import Celery
celery = Celery()
celery.config_from_object('celeryconfig')
celery.send_task('print_hello', ("Oleg"))
целери на "другую машину" конечно придется поставить. в конфиге показать урл брокера

Sasha
25.05.2016
11:18:08

Олег
25.05.2016
11:18:25
Ага, то есть я просто кидаю в RMQ сообщение в нужную queue и celery с той стороны сама слушает, что что -то пришло и исполняет это. Начинаю догонять

Google

Dmitry
25.05.2016
11:19:05
если тебе не нужен результат выполнения, то вообще все просто. если нужен, чуть сложнее. но я думаю ты и сам там уже наковыряешь

Олег
25.05.2016
11:28:34
run.py
from celery import Celery
celery = Celery()
celery.config_from_object('celeryconfig')
celery.send_task('print_hello')
celeryconfig.py
BROKER_URL = 'amqp://guest:guest@dr-1cutapp003:5672//'
CELERY_IMPORTS = ('tasks', )
Получаю ошибку
ConnectionResetError: [WinError 10054] Удаленный хост принудительно разорвал существующее подключение
telnet dr-1cutapp003 5672
проходит успешно, то есть проблем с доступом нет
А-а-а, guest же только локально работает!!

Dmitry
25.05.2016
11:44:24
именно :)

Олег
25.05.2016
11:46:48
А что мне celery в ответ возвращает?
e56f4a2b-1c86-4918-b76e-39ed4ff662cb
Как это интерпретировать? Как id сообщения в RMQ?

Dmitry
25.05.2016
11:47:05
ну типа taskid, забей :)

Олег
25.05.2016
11:48:33
Не-не. Я переписал helloworld
from celery import Celery
from celery import task
app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')
@app.task
def print_hello(x):
return x*2
То есть я уже результат хочу получить
Вызываю так
result = celery.send_task('print_hello', [5])

Dmitry
25.05.2016
12:29:13
тогда тебе нужен настроенный CELERY_RESULT_BACKEND (их много, можно sql база, можно redis, можно тот же rabbitmq, но тогда не забудь включить CELERY_RESULT_PERSISTENT, а то при рестарте кролика не забранные результаты будут пропадать)
а, вижу, настроен уже amqp

Alex
25.05.2016
12:32:15

Dmitry
25.05.2016
12:32:21
тогда дергай
result.ready()
пока не вернет True, и как будет готово, забирай
print result.get()
если в твоем хелло был косяк (например не умножал, а делил на 0), то при get() поймаешь эксепшн, если нужен трейс, то посмотришь result.traceback()

Google

Alex
25.05.2016
12:32:22

Dmitry
25.05.2016
12:36:10
@zartsoft фас! :)

Alex
25.05.2016
12:36:42

Олег
25.05.2016
12:47:21

Dmitry
25.05.2016
12:48:12
а в логах воркера на первой машине что?
но вообще amqp это старый уже бэкенд, попробуй rpc
CELERY_RESULT_BACKEND = 'rpc://'
не забудь, что это должно быть на обеих сторонах :) если на первом сервере (где воркер) забыл, то класть результаты никто не будет :)

Олег
25.05.2016
12:53:40
Логи.
The full contents of the message body was:
{'id': '8d8d7d9d-5f7c-4e58-8254-3c50c4eb334f', 'callbacks': None, 'task': 'print
_hello', 'eta': None, 'expires': None, 'kwargs': {}, 'timelimit': (None, None),
'args': [5], 'utc': True, 'chord': None, 'errbacks': None, 'taskset': None, 'ret
ries': 0} (257b)
Traceback (most recent call last):
File "c:\python35-32\lib\site-packages\celery\worker\consumer.py", line 456, i
n on_task_received
strategies[name](message, body,
KeyError: 'print_hello'

Dmitry
25.05.2016
12:55:53
KeyError: 'print_hello'
что-то пошло не так, сам же видишь

Олег
25.05.2016
12:56:31
Ага.

Dmitry
25.05.2016
12:56:40
воркер не видит таску
пошарь, что-то он видимо не импортировал, тот файл, в котором она у тебя описана

Марк
25.05.2016
13:04:53
Наверное, я буду 100500 в очереди, но раз уж она освободилась: на 3.5 имеет смысл валить или нет?

Maxim robox
25.05.2016
13:05:26
С чего?

Марк
25.05.2016
13:05:47
С 2.7 ессно

Maxim robox
25.05.2016
13:06:28
Новые проекты стартуешь на 3.x
Старые, по-желанию, портируешь.

Марк
25.05.2016
13:07:38
Набор киллер фич какой-то имееется?

Google

terry
25.05.2016
13:07:52
ребята, а подскажите, что за сервер мелкософт сделал вот весной типа халявным?

Arseny
25.05.2016
13:08:10
async / await ок

Maxim robox
25.05.2016
13:08:18
print становится функцией, а не оператором. :3

Aragaer
25.05.2016
13:08:43
юниттест.мок из коробки

Марк
25.05.2016
13:09:37
мок? Простите, я из коровника

Alexander
25.05.2016
13:11:07

Марк
25.05.2016
13:13:22
хм
На тройке asyncore есть? Или ее заменили на asyncio?

Dmitry
25.05.2016
13:18:09
Парни тут работка есть для удалёнщиков
Кто знаком с High Charts?
Библиотека для js рендеринг красивостей

Dmitry
25.05.2016
13:18:39
?

Марк
25.05.2016
13:19:14
Не на базе d3 часом?

Dmitry
25.05.2016
13:20:15
Вроде того
Нужно сделать интерфейс в джангу, рендерить jsonы. 3 экрана ~6 таблиц 6 графиков(лол птица курица 3 шт ;D )

Марк
25.05.2016
13:23:03
Всякие графики?

Dmitry
25.05.2016
13:27:03
Ага

Олег
25.05.2016
13:33:40
воркер не видит таску
Я сдвинулся с мертвой точки.
Ошибка была в том, что имя метода нужно было указывать через tasks
result = celery.send_task('tasks.print_hello', ["Oleg"])
Теперь в логах есть информация
[2016-05-25 16:32:50,422: INFO/MainProcess] Received task: tasks.print_hello[e424dfc4-f569-40f8-a8e4-368ed4126316]
[2016-05-25 16:32:50,437: INFO/MainProcess] Task tasks.print_hello[e424dfc4-f569-40f8-a8e4-368ed4126316] succeeded in 0s: hello, Oleg
Однако этот кусок все равно в бесконечном цикле
result = celery.send_task('tasks.print_hello', ["Oleg"])
while result.ready() == False:

Dmitry
25.05.2016
13:42:16

Google

Марк
25.05.2016
13:42:43
Не. Я ток для себя курил. За лаве не готов браться пока

Владимир
25.05.2016
13:43:42
https://github.com/novafloss/django-chartjs

Dmitry
25.05.2016
13:46:26
Я сдвинулся с мертвой точки.
Ошибка была в том, что имя метода нужно было указывать через tasks
result = celery.send_task('tasks.print_hello', ["Oleg"])
Теперь в логах есть информация
[2016-05-25 16:32:50,422: INFO/MainProcess] Received task: tasks.print_hello[e424dfc4-f569-40f8-a8e4-368ed4126316]
[2016-05-25 16:32:50,437: INFO/MainProcess] Task tasks.print_hello[e424dfc4-f569-40f8-a8e4-368ed4126316] succeeded in 0s: hello, Oleg
Однако этот кусок все равно в бесконечном цикле
result = celery.send_task('tasks.print_hello', ["Oleg"])
while result.ready() == False:
попробуй закомментировать весь этот цикл с принтом и сделать просто
result.get(timeout=10)
это простой синхронный вызов с таймаутом 10 сек, у тебя там ничего нет, оно быстро выполнится и успеет вернуть, проверим, работает ли вообще


Олег
25.05.2016
13:47:33
Traceback (most recent call last):
File "run.py", line 5, in <module>
result.get(timeout=10)
File "C:\Python35-32\lib\site-packages\celery\result.py", line 169, in get
no_ack=no_ack,
File "C:\Python35-32\lib\site-packages\celery\backends\amqp.py", line 157, in wait_for
raise TimeoutError('The operation timed out.')
celery.exceptions.TimeoutError: The operation timed out.


Alexey
25.05.2016
13:48:22
#работавофисе Москва ФуллДэй
Backend(Python)
- Минимум 1 рабочий проект (прошу приложить ссылку на работающий проект-сайт или ссылку на гитхаб с исходниками)
- Опыт работы с web фреймворками (django или аналоги)
- Знание основ SQL
- Знание основ клиент-серверного взаимодействия - протокол http, json/xml, websocket
- Уверенное пользование системой контроля версий git
- Уверенное пользование linux
- Необязательно, но большим плюсом будет:
- опыт работы с такими системами как cassandra, mongodb
- знание Java, опыт разработки настольных приложений на Java(возможно придется помогать с разработкой клиентской части, задач много и они интересные)
писать в элэс
сорри за офтоп, вдруг кому интерсно.

Dmitry
25.05.2016
13:51:21

Admin
ERROR: S client not available

Boris
25.05.2016
13:51:34
Джава на клиенте, питон на бэке? Прикольно

Марк
25.05.2016
13:52:38
Ой, кассандра - это та пизда, которая мне оперативу на рабочем тазе забивает

Олег
25.05.2016
13:52:45
Вот такой файл celeryconfig,py
BROKER_URL = 'amqp://login:password@dr-1cutapp003:5672//'
CELERY_RESULT_BACKEND = 'rpc://'
CELERY_IMPORTS = ('tasks', )

Dmitry
25.05.2016
13:52:48
Ага)
за результат

Марк
25.05.2016
13:54:56
Надо будет как-то вернуться к Кассандре на посмотреть еще раз.

Dmitry
25.05.2016
13:55:40

Олег
25.05.2016
13:56:23
Queues создается, но сообщений в ней я не вижу
Причем сервер в логах пишет имя очереди и клиент по print(result) отдает имя очереди

Марк
25.05.2016
13:58:09
Еще занятная OrientDb для графов. Но субьективно кажется полным отстоем

Paul
25.05.2016
14:23:51

Google

Dmitry
25.05.2016
14:24:34
это программисты, они всегда так делают :)
тоже ведь немного админы. неуязвимого локалхоста :)

Dmitry
25.05.2016
14:27:04
Ну сломает человек
Получит по шее
Зато потом ниче делать не будет)

Paul
25.05.2016
14:27:24
http://backendconf.ru/2016/abstracts/2202
жаль, что HL++ традиционно зажмотится выложить запись :(

Dmitry
25.05.2016
14:31:16

Paul
25.05.2016
14:34:50
тут иногда в слоу лог упирается
да там миллион мест, где может что-то поломаться. Slow log и log_no_index, query cache, table cache, sort cache, tmp_table_space, innodb_pool_size, вид сброса записи на диск, скорость работы диск, бинлог и его отсутствие, slave_bin_log и его особенности. Можно сидеть над этой темой бесконечно

Dmitry
25.05.2016
14:35:43
я к тому что иногда даже включенный слоу лог тормозит систему
а зпускать профайлеры-тюнеры на боевой базе это вообще

Paul
25.05.2016
14:36:48
mysqltuner - это не профайлер.
запуск профайлинга на базе хотя бы в полтысячи запросов/сек считаю своеобразным способом самоубийства

Dmitry
25.05.2016
14:41:11

Paul
25.05.2016
14:48:10
а что?
анализатор статистики и настроек. Профилировать не умеет.

Boojum
25.05.2016
14:55:39
Кукла везде пролезла

Arseny
25.05.2016
14:56:01
>Запрещено оскорбления других участников.
зачем такой чат вообще нужен?

Dmitry
25.05.2016
14:56:02
просто узкоспециализированный