LINUX.ORG.RU

Сообщения rubro

 

Не могу настроить mikrotik + IPTV ростелеком

 , , ,

Здравствуйте товарищи сис админы,

Есть проблема. Не получается настроить роутер mikrotik чтобы работал одновременно интернет (PPPOE) и IPTV, поставщик услуг ростелеком.

Проблема в том что работает либо интернет, либо IPTV, не могу сделать так чтобы работало всё сразу.

В качестве инструкции использовал это видео: https://www.youtube.com/watch?v=KfTofRBFQbc

Приставку если подключить напрямую к LAN кабелю интернета то всё работает. То есть моя задача сделать бридж в роутере.

Сейчас ситуация такая что делая по видео все шаги у меня интернет есть лишь до роутера - в микротике запускаю консоль и пингую например яндекс, всё нормально, но по WiFi или через LAN кабель если подключаться то интернета нет и даже на роутер невозможно по IP войти, лишь по MAC адресу и фирменную утилиту winbox.

В какую сторону нужно копать?

PS: Я сильно зелёный, ничего сложнее dlink dir-300 не настраивал жизни

rubro
()

python opencv pattern matching как найти все изображения

 ,

Задача: надо найти все картинки внутри другой картинки и обрамить их все красной рамкой.

Есть рабочий код который находит одну картинку внутри другой.

Есть второй код который находит не одну картинку, а все.

Проблема в том что первый код находит лишь одну картинку, а второй код должен находить все картинки, но не находит ни одной.

Может кто-нибудь пожалуйста сказать в чём дело и если умеет то исправить второй код чтобы он заработал?

Либо первый код так переделать чтобы находил все изображения а не только первое.

Я пробовал у меня скиллов не хватает :(

rubro
()

(50$) Python celery, исправить баг

 , , ,

Решено, тема не актуальна.

rubro
()

Python celery, помогите привлечь внимание разработчиков

 ,

Дополнение: Проблема решена. Не актуально!

Дополнение: кто хочет за деньги решить проблему вам сюда

Всем доброго дня!

Имеется критический баг в celery, который я очень детально вот здесь расписал разрабочикам.

Проблема в том что разработчики не чешутся по каким-то причинам, баг очень для меня критичный. И я прошу у кого есть возможность и желание помочь апнуть там тему чтобы она наверх снова вылезла.

Если кто в celery шарит и считает что бага нет, то прошу пожалуйста указать на мою ошибку если она есть.

Я также писал создателю celery (товарищ Ask Solen) на мыло, но он проигнорировал.

rubro
()

Python celery, многопоточно воркеры, однопоточно обработку результатов

 ,

Всем доброго дня!

Изучаю celery, есть неясности. Прошу пожалуйста помочь кто в теме.

Дано:

  • 100 миллионов тасков которые надо выполнить, они лежат в базе sqlite в виде разбросанных данных
  • Скрипт воркер, который обрабатывает таски (он запускается посредством celery)
  • Функция db_dumper, которая принимает на входе результат таска и пишет в нужном для меня виде результат в sqlite
  • Celery 3.1.24

Задачи:

  1. Добавить ещё 1 поток который параллельно занимался бы сбором результатов всех успешных тасков, и складывал результаты в sqlite посредством моей функции db_dumper
  2. Как-то нужно удалять успешные таски после п.1, настройки celery сейчас такие:
    BROKER_TRANSPORT='amqp',
    CELERY_RESULT_BACKEND='rpc://'
    на rpc почему-то не пашет result.forget() для таска

Как это можно сделать?

Что пробовал:

  1. Ставил CELERY_RESULT_BACKEND sqlite базу, мне не понравилось что туда пишется информация в своём формате (id таска, статус, результат в бинарном формате), мне это не подходит
  2. Пробовал сделать как в пункте выше, но затем туда подключаться и оттуда выгребать информацию о тасках, получается много лишних движений, хочется это лишнее звено убрать и напрямую из celery брать успешные таски и их результаты писать в базу как мне надо
rubro
()

Python, сильнейшая регрессия SELECT при fetchall()

 ,

Всем доброго времени суток!

Имеется небольшой код который создаёт базу и туда закидывает тестовые данные, а затем делает обращение к базе SELECT запросом:

@profile # декоратор для профайлера
def do():
    import os
    import sqlite3

    # смотрим есть ли уже база на дсике
    is_db_exist = os.path.isfile('./123.db')
    print('is_db_exist: {}'.format(is_db_exist))
    # return

    db = sqlite3.connect('123.db')

    # базы на диске нет, значит создаём структуру и добавляем данные
    if not is_db_exist:
        # создаём базу
        db.execute('''
        CREATE TABLE task_list (
        id INTEGER PRIMARY KEY AUTOINCREMENT
        );
        ''')
        db.execute('''
        CREATE TABLE dict (
        id      INTEGER PRIMARY KEY AUTOINCREMENT,
        [key]   TEXT,
        value   TEXT,
        task_id   REFERENCES task_list (id)
        );
        ''')

        db.execute("INSERT INTO task_list (id) VALUES (NULL);")
        db.commit()

        # добавляем тестовые записи
        for i in range(300000):
            db.execute('''
            INSERT INTO 'dict' ('task_id', 'key', 'value') VALUES
                          ('{0}', 'key_1', 'data_1'),
                          ('{0}', 'key_2', 'data_2'),
                          ('{0}', 'key_3', 'data_3'),
                          ('{0}', 'key_4', 'data_4')
            '''.format(i))

        db.commit()

        # проверяем что всё нормально добавилось
        total_added = db.execute('SELECT count(*) from dict;').fetchall()[0][0]
        print('добавлено записей: {}'.format(total_added))

    got = db.execute('select [key], value from dict where task_id like 1')
    fetched = got.fetchall() # вот этот кусок выполняется целых 0.5 секунд, вместо 0.001 секунд

    db.close()

do()

Обратите внимание на этот кусок кода:

    fetched = got.fetchall() # вот этот кусок выполняется целых 0.5 секунд, вместо 0.001 секунд

На одной машине (windows 7) он выполняется целых 0.5 секунд, а на другой (windows 8) 0.001 секунд.

Откуда-то взялась колоссальная регрессия. Я пробовал обновлять питон до последней версии 3.5.3 (в пределах ветки 3.5 эта версия последняя), но толку нету.

На стэке пишут надо добавить индексы и будет всё хорошо, но что-то мне они не помогли.

Коллеги, куда копать, что делать?

rubro
()

python3 celery механизм работы, общие вопросы

 ,

Всем доброго дня, есть вопросы по celery:

  • 1. Работал сервер, далее его ребутнули, куда деваются таски которые выполнялись в момент выполнения?
  • 2. Верно ли я понимаю что 1 таска = 1 процесс?
  • 3. Можно ли указать сколько процессов юзать до запуска таксков? То есть не в конфиге лазить, а прям перед запуском сказать что вот для этой группы тасков потолок допустим 20 процессов. Требуется это значение менять динамически.
  • 4. Что происходит с тасками после выполнения? У меня такое ощущение что пока я не сделаю вызов .forget() то они (результаты их выполнений) будут болтаться в памяти
  • 5. Добавляю таски, а они все в PENDING, и не ясно почему так, есть механизм как-то форсировать выполнение?
  • 6. Есть ли нормальные туториалы по сабжу? На офф сайте есть немного, но этого мало, я бы хотел посмотреть как в продакшене рабочий код выглядит, разобраться с тем как люди работают, чтобы не городить велосипеды
  • 7. Можно ли собрать исполняемый файл (например exe для windows) да так чтобы celery был уже внутри? И чтобы это всё было без излишней возни
rubro
()

Python, как удалить элемент в списке во время перебора?

 , , ,

Задача: есть список, надо перебирать в нём элементы по кругу, и (время от времени) удалять оттуда текущий элемент прямо во время перебора

Ниже моя неудачная попытка это сделать.

Есть код:

from itertools import cycle
import time

m = [1,2,3]

for i in cycle(m):
    time.sleep(0.3)
    print(i)
    # m.remove(i)

Он выдаёт числа по кругу:

1
2
3
1
2
3
1
2
3
итд

Теперь надо как-то к примеру во время работы удалить например число 2, и чтобы далее список продолжил перебираться между 1 и 3.

rubro
()

sqlite как сделать систему тегов

 , ,

Как делается система тегов? То есть у меня есть записи в базе, я хочу им присваивать ключи прозвольно, и при необходимости select'тить оттуда по списку ключей нужные записи.

Я слаб в базах, сейчас мне кажется что это классический случай many-to-many. Хочу понять так ли это.

Помышляю сейчас создать колонку tags и туда вставлять слова (теги/метки) с помощью обрамления, например вот так: [WORD], тогда при необходимости я смогу сделать SQL запрос нужный мне. Как итог там будет вот такая каша: [WORD 1][WORD 2][WORD WORD WOOOOORD]. Кажется это какой-то велосипед. Обрамления служат тут с той лишь целью чтобы слова не слипались между собой.

rubro
()

sqlite как посчитать дубли строк включая проценты

 , , ,

Дано: sqlite база:

CREATE TABLE test_table (
    text TEXT
);[/sql]

Туда добавлено:

INSERT INTO test_table (
                           text
                       )
                       VALUES (
                           'test'
                       ),
                       (
                           'test'
                       ),
                       (
                           'test'
                       ),
                       (
                           'test2'
                       ),
                       (
                           'test2'
                       ),
                       (
                           'test3'
                       );

Сейчас есть вот такой запрос:

SELECT COUNT(*), text FROM test_table GROUP BY text ORDER BY COUNT(*) DESC
Он считает дубли строк и выдаёт результат с сортировкой по убыванию:
3	test
2	test2
1	test3

Меня всё тут устраивает, работает хорошо.

Задача: необходимо сделать так, чтобы:

  • 1. Добавить слева ещё одну колонку, чтобы в ней были проценты (то есть % сколько эта строка в дублях занимает от общего количества)
  • 2. Нужно чтобы проценты «бились», то есть если их все сложить вместе то должно получиться 100%, прошлые решения которые я нагуглил на стэке этого не давали, там всегда были дикие погрешности
  • 3. Проценты нужны с точностью до двух знаков
  • 4. И если возможно, то приятной мелочью будет там воткнуть сам знак процентов рядом с цифрой, но это не принципиальное условие, просто косметический эффект

Есть на форуме SQL ниндзя?

rubro
()

как легко работать с базой?

 , , , ,

Я делаю проект в области web scraping, скрипт работает в режиме пула, каждый воркер (или хз как правильно называется, поток/процесс) получает свой объект для работы, в котором содержится URL сайта и прочая информация.

Затем это всё дело работает, по ходу работы раздувает объект нужными мне данными, и я после получения результатов (объекта который уже наполнен данными) уже отправляю SQL запрос для каждого объекта в локальную базу sqlite, туда пишутся некоторые данные объекта которые мне интересны.

Мне вот что не нравится. Если я хочу какое-то новое свойство добавить в объекте, то мне приходится менять структуру таблицы и менять руками SQL запрос, тестить всё это дело потом. Очень накладно выглядит.

Может оно как-то всё можно более красиво делать? И при этом не иметь overhead'а. Я слышал модные слова вроде ORM, и ещё что-то такое, и хочу понять насколько это применимо для меня и что тут вообще можно придумать.

Раньше я не парился и тупо писал всё в файлы, было очень удобно но потом стало файлов нехватать, теперь пытаюсь красиво перелезть в базу (локальную sqlite).

rubro
()

sqlite связь типа one to many

 , ,

Как сабж сделать?

Очень надо чтобы я из одной колонки мог ссылаться не на одну запись (one to one, как это позволяет например foreign key) а на кучу записей.

Я хочу сделать что-то типо системы тегов, чтобы по ним дёргать нужные мне записи.

Зачем так? Надоело постоянно менять структуру базы при изменении софта, хочу её разрушить чтобы стала одноранговой, а не иерархичной, так должно стать гораздо лучше.

rubro
()

git несколько директорий проекта

 

Можно ли как-то сделать так чтобы у меня было несколько директорий проекта?

Например у меня 2 ветки это master и testing, и я хочу после после комитов видеть изменения в каждой из директорий согласно той ветки которой директория принадлежит.

Сейчас получается я посредством фичи checkout заменяю все файлы в одной директории то на одну ветку, то на другую. Это очень удобно, но не всегда.

rubro
()

pycharm добраться до sqlite базы

 , ,

Как можно работать с sqlite базой визуально в pycharm? У меня community edition

Я поставил plugin DB Navigator, но там никак не могу понять как увидеть данные в виде таблицы

На ютубе ещё видел что в ПРО версии демонстрируют встроенный функционал работы с sqlite, как я понял в community версии его нету и тут только через plugin'ы возможно это делать?

rubro
()

Ищу альтернативу memento database

 

Есть очень хорошая программа для android, недавно они сделали версию для десктопов. Вкратце это карманная база данных, можно свои поля добавлять и очень гибко манипулировать данными, есть JS поля, математические выражения и прочее.

Из типовых задач которые её решают - инвертаризация, ведение расходов/доходов, учёт времени и многое другое.

Моя жизнь туда начала перетекать, это очень удобно иметь всё в базе и видеть свою жизнь буквально в цифрах.

Проблема в том что я не могу найти ей открытую альтернативу. Может местые гуру знают? Я искал, вот тут например ничего путного нету

Если взять какие-то отдельные качества этой программы, например поддержка форматирования текста, то полно разных программ (на манер evernote) если взять строго базы данных то тоже много всего есть (что именно я не знаю, но думаю есть), а чтобы и то и другое было сразу и была поддержка не только десктопа но и андроида, да ещё и желательно с синхронизацией, вот такого-то не могу найти нигде.

Мне нужна мощность excel и сила заметок evernote. Эта программа это сочетает, но от проприетарности мне плохеет, завтра автор может зонд засунуть и всех поработить.

rubro
()

python перехват чужих print

 

Допустим есть такой код:

def my():
    print("some my text")

x = my()

print(x)
Результат:
some my text
None

Как можно в переменной «x» получить то что функция выдавала в print?

Зная наперёд что КО предложит мне заменить print на return, скажу что я хочу перехватывать print'ы чужих модулей, и я очень не хочу залезать в каждый и там что-то менять.

rubro
()

python помогите фиксануть утечку

 , ,

Ребят есть кусок рабочего кода, я его упростил до предела, после работы жрёт 3 гига памяти, и через gc.collect() не хочет её освобождать.

Может кто-нибудь пожалуйста исправить утечку?

В функции engine я раздуваю объект, и всё труба, вернуть память назад уже никак не получается.

Код:

from concurrent.futures import ProcessPoolExecutor
import time
import gc
import pdb
from queue import Queue

# через сколько выполнений обнулять пул
POOL_RESET_PERIOD = 10
# сколько заданий закидывать в пул
POOL_TASK_CHUNK = 10

q = Queue()


# класс в котором будет тяжёлый объект
class MyHugeTask:
    def __init__(self):
        self.cont = {}


# функция обработчик
def engine(box):
    # раздуваем объект чтобы он начал жрать память
    box.cont["123"] = "123"*1000*100*100*10
    return box

# закидываем таски для теста
for i in range(50):
    q.put(MyHugeTask())


def main_run(queue):
    print("принято заданий: {}".format(queue.qsize()))
    pool = None
    count = 0
    it = 0

    while True:
        it += 1
        # reset pool через каждые N выполнений
        if pool is None or not count % POOL_RESET_PERIOD:
            if pool is not None:
                pool.shutdown()
            pool = ProcessPoolExecutor(max_workers=1)
            print('Pool reseted')

        if queue.qsize() is 0:
            break

        # добавляем задания в пул
        futs = []
        for x in range(POOL_TASK_CHUNK):
            if queue.qsize() is 0:
                break
            # увеличиваем счётчик пулла
            count += 1
            # пробуем взять задание
            try:
                task = queue.get()
            except:
                break
            else:
                # задание в пул
                fut = pool.submit(engine, task)
                del task
                # для отчёта
                futs.append(fut)
        print('Submited {} tasks into pool'.format(len(futs)))

        # смотрим result'ы работы пула
        for fut in futs:
            try:
                box = fut.result()
            except Exception as ex:
                print('exception: {}'.format(ex))
            else:
                # удаляем использованный таск чтобы очистить память
                del box
                wow = 1
        del futs
        print("круг: {} finished".format(it))

    # ждём когда пулл всё выполнит
    while True:
        if len(pool._pending_work_items) is not 0:
            time.sleep(1)
        else:
            break
    print("pool finished")
    print("попробуйте теперь собрать мусор через gc.collect() и память не высвободится")
    pdb.set_trace()

if __name__ == '__main__':
    main_run(q)

rubro
()

python странная утечка памяти

 , ,

Имеется утечка памяти в программе, делал специально мультипроцессорность чтобы от них всех разом избавиться.

Ситуация выглядит так, я в целях отладки запускаю посредством IDLE главный скрипт, затем делаю что надо, на выходе получаю сожранный 1gb оперативной памяти. Если затем программу закрыть и ввести в консоли IDLE команду:

gc.collect()
То потребление падает до приемлимых 50mb.

Выходит утечка и есть, потому что я её вижу, и в то же время её будто и нет, так как сборщик мусора всё нормально убирает когда я руками его вызываю. Вот только сборщик мусора сам по ходу работы похоже за собой не хочет убираться.

Я пробовал в середине скрипта втыкать в определённых местах эту команду чистки мусора, но программа начинает очень медленно от этого работать, производительность падает по ощущениям раз в 20. Такое мне не подходит.

Что тут можно придумать? В питоне я достаточно неопытен, программа имеет гуй и работу с сетью, я сейчас рассматриваю возможность гуй оторвать от воркеров и наладить с ними общение посредством message broker или чего-то такого основанного на сообщениях, чтобы скрипты все были отделены напрочь друг от друга. Хотелось бы конечно как-то всё на текущем уровне исправить. Прошу совета у бывалых форумчан.

rubro
()

Обновление SkypeWeb Plugin for Pidgin

 ,

Группа Open Source

Плагин SkypeWeb для популярного мультипротокольного мессенджера Pidgin обновился до версии 1.2.1.

Изменения:

  • исправлено несколько проблем с учетными записями Windows Live;
  • исправлена настройка статуса (текст настроения);
  • исправлены проблемы при поиске друзей;
  • несколько уменьшено количество отключений от сети.

>>> Проект на GitHub (github.com)

rubro
()

pyqt QPlainTextEdit и проблемы с прорисовкой

 , ,

Всем доброго времени суток!

Делаю GUI силами pyqt5, и мне надо сделать так чтобы был лог динамичный, то есть многоточно работает скрипт и мне надо писать результат работы в лог в интерфейсе, добавлять туда строки новые постоянно.

Для этого использую QT версии 5, там есть виджет QPlainTextEdit - это и есть лог.

Проблема в том что если добавлять по тупому туда значения например циклом - то всё нормально работает, но разумеется пока он туда пишет - зависает интерфейс и пока цикл не закончится то не разлочится.

Но у меня многоточное приложение, я сделал так - потоки работают и в отдельную очередь закидывают то что мне надо в логе увидеть, и отдельный рабочий в 1 поток делает постоянно append в этот лог-виджет.

Всё работает чудесно и замечательно, однако почему-то отрисовка не срабатывает, и чтобы мне там увидеть изменения что туда записало в лог - я беру мышку и выделяю всю область, только после этого я могу видеть что туда записало в эту текстовую область. Вот как это починить можно?

rubro
()

RSS подписка на новые темы