LINUX.ORG.RU

296
Всего сообщений: 2251

Pygtk. Сохранение информации в родителе.

Ситуация такая:

В начале работы с программой главное окно (экземпляр класса Viewer) при инициализации создает еще одно окно - стартовое меню - экземпляр Bases() (ListStore + TreeView). Юзер, выбирает одно из значений (путь к базе) в Bases(), которое должно быть учтено при заполнении Viewer'a данными. Решил хранить переменную с путем к базе в объекте-родителе обоих классов, Common(). Но не пойму, как ее перезаписать из child.

Пока писал, понял, что надо было просто запустить Bases отдельно, получить оттуда данные. Потом запустить Viewer с учетом полученных данных. Тем не менее, все равно охота получить ответ на вопросы (они - ниже).

Вот что набыдлокодил:


def class Common():
    ''' Коллбэки и проч '''
    ....
    self.base_path = 'empty'

def class Viewer(Common):
    def __init__(self, b_name):
        Common.__init__(self)
        ...
        self.bss = Bases(b_name)
        self.bss.window_b.connect('hide', self.print_main_path)

     def print_main_path(self, win):
        print self.main_path
   
def class Bases(Common):
    def __init__(self):
        Common.__init__(self)
        self.window_b = gtk.Window(gtk.WINDOW_TOPLEVEL)
        .....
        self.b_tv = gtk.TreeView()
        .....
        self.window_b.set_type_hint (gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
        self.window_b.show()
        self.window_b.connect("destroy", self.destroy_cb) 

        self.b_tv.connect('row-activated', self.base_hide)

    def base_hide(self, tv, path, column):
        ... get full_path from TreeView ...
        self.base_path = full_path
        self.window_b.hide()
        

1. Так вообще делать стоит? 2. Проблема тут в том, что коллбэк в Viewer печатает не full_path, а «empty». Как обновить переменную в родительском объекте? 3. Подскажите нормальный способ передавать данные из одного объекта в другой - попадаются какие-то костыльные методы все время.

 ,

frpaul ()

Numpy туда, куда не нужно

Для питона есть numpy, а для Go есть что-то подобное? Если возможно, то ссылочку, пожалуйста.

 ,

awesomebuntu ()

MySQL, ассинхронный python-клиент, медленный SELECT

Для примера, такой запрос:

SELECT column_1, column_2 FROM table
WHERE
    created > '2016-01-05 23:59:59'
AND
    created < '2016-02-06 00:00:00';

Результат ~2.5KK строк, а по времени:

  • mysql - ~2 сек;
  • python-клиент на mysqlclient (форк MySQLdb) - ~ 3.5 сек.;
  • python-клиент на aiomysql (внутри PyMySQL) - ~ 40 сек.

В общем, как в присказке про рыбку и пароход, хочется ассинхронности и быстрых запросов.

Кто aiomysql использует, это возможно?

UPDATE. Господа, вопрос не про ассинхронность в mysql, и не про ОРМ. А про то, что коннектор, который использует aiomysql сам по себе работает в 10 раз медленнее, чем можно. Весь вопрос, есть возможность поменять коннектор в aiomysql или нет, и как выход остается смотреть в сторону ThreadPoolExecutor или aioodbc.

UPDATE 1. aioodbc и ThreadPoolExecutor мне в помощь.

 , ,

vvn_black ()

Python уполз

import sys
def makeVernamCypher( text, key ):
    answer = ""
    p = 0 
    for char in text:
        answer += chr(ord(char) ^ ord(key[p]))
        p += 1
        if p==len(key):
            p = 0
    return answer
text = sys.argv[1]
key = sys.argv[2]
txt = makeVernamCypher(text, key)
print(txt)

Пробую запустить:

cheky@breky:~$ verman.py helloworld asdfgyjkmp
Получаю пустоту. В чем проблема?

 , ,

PanZagloba ()

Странная ошибка в асинхронном коде

class Request(object):
    def __init__(self, url: str, host: str, port: int, session: ClientSession, data: bytes,
                 ids_to_remove: list, callback):
        super().__init__()

        self.__url = url
        self.__host = host
        self.__port = port
        self.__session = session
        self.__data = data
        self.__ids_to_remove = ids_to_remove
        self.__callback = callback

    async def send(self):
        try:
            async with self.__session.post('http://{}:{}{}'.format(self.__host, self.__port, self.__url),
                                           data=self.__data) as r:

                if r.status == int(HTTPStatus.OK):
                    await self.__callback(self.__ids_to_remove)
        except Exception as e:
            print(e)

    def ids_to_remove(self):
        return self.__ids_to_remove


class ConnectionsPool(object):
    def __init__(self, host: str, port: int, max_connections: int, remove_ids_callback):
        super().__init__()

        self.__max_connections = max_connections

        self.__host = host
        self.__port = port
        self.__remove_ids_callback = remove_ids_callback

        self.__sending_futures = []
        self.__session = ClientSession(connector=TCPConnector(verify_ssl=False, limit=max_connections))

    async def send(self, url: str, data: bytes, ids_to_remove: List):
        if len(self.__sending_futures) > self.__max_connections:
            await asyncio.wait(self.__sending_futures, return_when=asyncio.FIRST_COMPLETED)

        request = Request(url, self.__host, self.__port, self.__session, data, ids_to_remove,
                          self.__remove_ids_callback)
        future = asyncio.ensure_future(request.send())
        future.request = request
        future.add_done_callback(self.future_done)
        self.__sending_futures.append(future)

    def future_done(self, future):
        self.__sending_futures.remove(future)

    def ids_to_remove(self):
        result = []
        for f in self.__sending_futures:
            result += f.request.ids_to_remove()
        return result
root: 'Task' object has no attribute 'ids_to_remove' (abstract_retranslator.py:31)
Traceback (most recent call last):
  File "/srv/backend/common/retranslation/abstract_retranslator.py", line 29, in retranslate
    await self._retranslate()
  File "/srv/backend/common/retranslation/http_retranslator.py", line 135, in _retranslate
    async for event in self.events(connections_pool.ids_to_remove()):
  File "/srv/backend/common/retranslation/http_retranslator.py", line 70, in ids_to_remove
    result += f.request.ids_to_remove()
AttributeError: 'Task' object has no attribute 'ids_to_remove'

Как f.request может стать Task? Или я неправильно готовлю асинхронный код на Пайтоне?

python 3.5

 , ,

panter_dsd ()

Есть ли смысл использовать для численных расчетов python?

Есть ли смысл использовать для численных расчетов python (методы конечных элементов, математические расчеты, много циклов, большие данные)?

Или лучше использовать c++? Насколько медленнее код получается?

Плюсы питона:

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

Минусы питона:

  • медленнее плюсов
  • после c++ трудно переключится, кое-что по-другому (структуры, switch)
  • я его гораздо хуже знаю

Дал прогу на c++ одному, от так и не смог его осилить :(

Поделитесь историей успеха.

 , ,

Zodd ()

Python. Оптимизация кода

По питону в основном работал с Odoo и стиль привил себе ихний. Но вот решил написать свой маленький костыль для гнома и решил почитать об производительности питона(не смейтесь) Полез читать https://wiki.python.org/moin/PythonSpeed/PerformanceTips

И почитав его возникло чувство, что Odoo антипатерн. И собственно вопрос - как лучше реализовать метод:

def getSettings(self):
        if self.settings != None:
            return self.settings
        self.settings = {}
        for section in self.parser:
            self.settings[section] = {}
            for parameter in self.parser[section]:
                self.settings[section][parameter] = self.parser[section][parameter]
или
def getSettings(self):
        if self.settings != None:
            return self.settings
        parser = self.parser
        self.settings = {
            section: {parameter:parser[section][parameter]}
            for section in parser 
            for parameter in parser[section]
            }

Первый вариант мне больше удобочитаем, но вот по производительности, если словари очень большие - будет ли выигрыш?

 

webmak ()

установка supervisor (crash)

На арче решил поставить supervisor:

[foozzi@foozzi crowdtrip]$ sudo pacman -S supervisor
разрешение зависимостей...
проверка конфликтов...

Пакеты (7) python2-appdirs-1.4.0-5  python2-meld3-1.0.2-1  python2-packaging-16.8-2  python2-pyparsing-2.1.10-2  python2-setuptools-1:34.2.0-1
           python2-six-1.10.0-3  supervisor-3.3.1-1

Будет установлено:  6,36 MiB

:: Приступить к установке? [Y/n] 
(7/7) проверка ключей                                                                            [#########################################################] 100%
(7/7) проверяется целостность пакета                                                             [#########################################################] 100%
(7/7) загрузка файлов пакетов                                                                    [#########################################################] 100%
(7/7) проверка конфликтов файлов                                                                 [#########################################################] 100%
ошибка: не удалось завершить транзакцию (конфликтующие файлы)
python2-six: '/usr/lib/python2.7/site-packages/six.py' существует в файловой системе
python2-six: '/usr/lib/python2.7/site-packages/six.pyc' существует в файловой системе
python2-appdirs: '/usr/lib/python2.7/site-packages/appdirs.py' существует в файловой системе
python2-appdirs: '/usr/lib/python2.7/site-packages/appdirs.pyc' существует в файловой системе
python2-setuptools: '/usr/bin/easy_install-2.7' существует в файловой системе
Обнаружены ошибки, пакеты не обновлены.
что то я не понимаю, как и зачем это происходит...

 , ,

foozzi ()

Микросервисная архитектура на python

Нашел пример реализации сабжа на flask - https://github.com/umermansoor/microservices
Сразу же меня смутило одно, каждый сервис поднимается на отдельном порту - 5000, 5001, 5002....
Собственно это пугает, не так давно перешел с php на python, хочу реализовать micro service arch приложение, но куда копать лучше пока не знаю, смотрел еще на nameko, кто с ним работал? Что посоветуете?

 , ,

foozzi ()

Telegram Bot перестаёт получать обновления

Добрый вечер! Написал бота для телеграмма на питоне. В процессе тестирования обнаружилось, что спустя неторое время работы он перестаёт получать обновления. И дело тут не в моём коде, а в самом telegram api, т.к. простое открытие https://api.telegram.org/bot/getUpdates в браузере возвращает json со СТАРЫМИ сообщениями. Т.е. бот-аккаунт ведёт себя так, как будто бы я в него ничего не пишу. При этом отправка сообщений через бота работает. Примерно через сутки получение обновлений возобновляется.

Сейчас я завел несколько бот-аккаунтов и при отключении одного просто меняю TOKEN на другой и работаю через другой аккаунт, но это не выход. Я не понимаю, почему так происходит и к кому надо обратиться.

 , ,

Strannik-j ()

как правильно обработать исключение в for ... in (python)?

with open(filename, mode="r", encoding="utf-8") as log:
   for line in log:
      < . . . >

Как поймать исключение в for .. in, чтоб после обработки продолжить цикл?

 ,

olegkrutov ()

Ладон для python - Кто щупал?

http://ladonize.org/index.php/Main_Python

Кто-то использовал/щупал? Как оно? Годно? Живо? Пригодно?

Или что лучше/проще для wsdl?

ps. python3

 , , ,

bvn13 ()

RabbitMQ «подписки»

Добрый день, есть сервер, который делает публикации в Rabbit в определенные очереди. Есть клиент на Python , который эти очереди должен слушать. Во всех примерах для Python+RabbitMQ генерации подписки на очереди происходит до запуска «прослушки», но в какой-то момент времени нужно будет «подписаться» на еще какую-нибудь очередь, возможно ли это? http://pika.readthedocs.io/en/latest/examples/asynchronous_consumer_example.html

Вот например этот пример, но как мне добавить новую очередь не закрывая старую? Если, например, для Redis есть модуль tornadoredis в котором все это делается довольно тривиально, то с RabbitMQ не могу найти ничего аналогичного...

 ,

hell_wood ()

Изучение Python

Всем привет!

Как будущий специалист по безопасности, я начал изучать python. Есть несколько вопросов по этому языку:

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

2. Почему именно jinja используется как шаблонизатор? В PhP удобнее - можно писать код внутри разметки

3. Какие фреймворки для веба посоветуете?

PS Страшно, что когда я забываю переключить раскладку у меня весь код заполнен «ыуда», даже подумал, что это послание от PHP, на котором стал меньше кодить =)

 ,

anonymous_xakep ()

CPython убежал на GitHub

Для тру: https://mail.python.org/pipermail/python-dev/2017-February/147381.html

Ещё один досвидос mercurial'у.
Жаль, что не на GitLab. Там интерфейс удобнее.
Хотя после их последнего db факапа, ничего удивительного.

 ,

blackst0ne ()

mpd client на python'e

Есть годный клиент на питоне, чтобы по функциональности мог сравниться с ncmpcpp ? Чтобы мог сортировки делать, удалять физический файлы и тд.

 , ,

bryak ()

python 2.7 opencv 3.2 rtsp

Подскажите opencv 3.2 умеет захватывать видео из rtsp/rtp потока? или ему нужно в каком то пережеванном формате отдавать через gst или ffmpeg?

 , ,

antech ()

Питон

Мне нравится python. Точнее нравился.

Это удобный, простой язык, на котором можно быстренько накатать нужный скриптик или так же просто написать проект побольше.

На нём я сам написал множество вещей.

НО ТЕПЕРЬ от одного только взгляда на питон в top'e у меня горит. А знаете из-за чего? Из-за некоторых пипрограммистов, решивших написать системные демоны на СКРИПТОВОМ ЯЗЫКЕ! БОЖЕ!

Каждый раз видя процессы wicd в топе у меня подгорает. Ладно приложения, ладно графические. НО ДЕМОНЫ ТО ЗАЧЕМ?!?

Я взглянул на исходники wicd и не увидел в них НИЧЕГО сложного и того, что ну никак нельзя было сделать на си! НИЧЕГО

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

ЗАЧЕМ ОНИ ЭТО СДЕЛАЛИ!?!

 ,

SL_RU ()

python ide с web интерфейсом

Есть такая отличная вещь для R - RStudio server. Позволяет получить доступ к мощной среде разработке откуда угодно, притом сбросив все тяжелые рассчеты в неведомые дали. Есть ли подобные решения для python?

 , ,

LIKAN ()

pyunpack и uwsgi

Пишу приложение на Django. Есть необходимость подгрузить файл формата CAB и распаковать его. Распаковка посредством pyunpack:

# views.py
from pyunpack import Archive
...
def upload_cab(request):
    ...
    try:
        Archive(filename).extractall(extract_path)
    except Exception as e:
        raise e

Код нормально работает в PyCharm, но на тестовом сервере (CentOS 7, uwsgi+Nginx) в e падает ошибка:

patool can not unpack /usr/sbin/uwsgi: unrecognized option '--non-interactive' getopt_long() error

Ошибка одна и та же как в случае uwsgi установленном через yum, так и через pip. В лог uwsgi (опция logto в uwsgi.ini) никаких ошибок не падает.

Так же в этом же проекте добавил консольную опцию к manage.py (через management.commands), где используется аналогичный код — проблем нет, архив распаковывается. Т.е. проблему локализовал до uwsgi.

 , ,

ivn86 ()