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
()

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

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

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

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

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

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

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

 , ,

rubro
()

python ограничить область видимости для import (или шаринг переменных между модулями)

Дано: a.py - главный модуль b.py - движок shared.py - файл с переменными

Вот так сейчас выглядит код: a.py:

import b
import shared

shared.shared_var = 1

b.engine()

b.py

import shared


def engine():
    print("работаем с: {}".format(shared.shared_var))

shared.py

shared_var = 0

В чём проблема: a.py вызывается многопоточно, и в итоге начинается каша - переменные внутри shared.py становятся общими для всех потоков.

Мне надо так сделать чтобы у каждого потока была своя область видимости.

Что я пробовал: - Делать import внутри функции def, итог - всё равно тоже самое - Делать не import, а from shared import * - так возникает геморой с тем что вызывая это в a.py я не могу в b.py передать контекст - Тупо всё в функции сувать (все переменные), в итоге на каждый чих мне надо портянку переменных сувать, код раздувается

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

PS: вот это уже читал http://ru.stackoverflow.com/questions/358/Глобальные-переменные-в-python

 , ,

rubro
()

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