Comments 29
UFO just landed and posted this here
Занятная библиотека. На момент реализации не слышал о такой.
В целом можно переехать на нее, так как все равно нужно подтягивать pika
В целом можно переехать на нее, так как все равно нужно подтягивать pika
+1
А чем он лучше? Я как-то к argparse привык
0
rmq_params.file.write(rk + '\n')
чтобы понять что это за зверь rmq_params пришлось поиском по файлу пройти — мне кажется лучше минимизировать использование глобальных переменных и передавать всё нужное для функции параметрами.
+1
Тут есть заморочка с тем, что обработчик
вызывается из встроенного в pika метода. Набор входных параметров такого метода фиксирован требованиями pika.
def on_message(channel, method_frame, header_frame, body):
вызывается из встроенного в pika метода. Набор входных параметров такого метода фиксирован требованиями pika.
0
1. rmq_params стоит переименовать, я так понимаю это cmd_line_arguments
2. В функции on_message объявлять глобальные переменные, потом вызывать функцию типа process_message в которую всё передавать явно и из которой даже можно возвращать новые значения счётчиков чтобы минимизировать использование глобальных переменных, а после process_message уже вызывать channel.basic_ack
2. В функции on_message объявлять глобальные переменные, потом вызывать функцию типа process_message в которую всё передавать явно и из которой даже можно возвращать новые значения счётчиков чтобы минимизировать использование глобальных переменных, а после process_message уже вызывать channel.basic_ack
0
Для примера набросал псевдокод on_message и process_message.
Параметров только много, надо либо именованными сделать, либо сгруппировать их в осмысленные объекты, либо разбить process_message на несколько независмых функций, но для пояснения того что я написал думаю достаточно.
Параметров только много, надо либо именованными сделать, либо сгруппировать их в осмысленные объекты, либо разбить process_message на несколько независмых функций, но для пояснения того что я написал думаю достаточно.
0
В предложенном варианте по сути просто вынос обработчика process_message. Можно сделать и так. Но профит не очевиден)
0
sys.stdout.write
почему не print?
'[' + rmq_tools.time_now() + '] — ' + str(all_cnt) + ' of ' + str(lim) + ' messages consumed. \r'
не лучше ли будет написать что-то вроде
'[{}] — {} of {} message consumed'.format(rmq_tools.time_now(),str(all_cnt),str(lim))
+1
UFO just landed and posted this here
почему не print?
Когда задался вопросом перезаписи строки в консоли нашел такое решение.
Действительно можно заменить на
print '[{}] — {} of {} message consumed /r'.format(rmq_tools.time_now(),str(all_cnt),str(lim)),
хотя запятая в конце режет глаз
0
str() таком случае не нужен, это я просто скопировал не подумав.
А зачем использовать второй питон?
А зачем использовать второй питон?
0
print('[{}] — {} of {} message consumed'.format(rmq_tools.time_now(), all_cnt, lim), end='\r')
Так лучше?)
0
Попробуй logging. Сразу и на вывод и в лог. Причем с разной степенью verbosity.
import logging
# add filemode="w" to overwrite
logging.basicConfig(filename="sample.log", level=logging.INFO)
logging.debug("This is a debug message")
logging.info("Informational message")
logging.error("An error has happened!")
+3
Ну и для читемости хорошо бы побить на мелкие функции со смысловыми названиями, например запись в файл вынести в функцию с соответствующим названием и там использовать with.
+1
Важно знать, что pika — not threadsafe. Amqpstorm хорошо подходит в качестве замены.
0
Sign up to leave a comment.
Коротко о работе с RabbitMQ из Python