Бывают задачи которые должны работать в одном экземпляре в данный момент.
В моем случае это была генерация прайсов.
Простой декоратор для задач не требущий никаких дополнительных файлов блокировок и серверов типа memcache и т.д.
Перед выполнением задачи смотрит на список запущенных задач в celery и если задача уже запущена с такими же аргументами, то не запускает выполнение.
https://gist.github.com/WorldException/9ce045f61627e6fa8d59
четверг, 25 февраля 2016 г.
четверг, 18 февраля 2016 г.
mysql и много insert-ов с помощью sqlalchemy, ускоряемся.
Как то потребовалось мне сделать генерацию пары десятков прайсов, да хранить их всех в одной таблице. А прайсы были большие по паре сотен тысяч записей в каждом. Да и обновлять их надо минимум раз в час.
Попытки вставки в цикле обычным insert привело к тому что 10 тыс. записей вставлялось примерно минут 15.
В общем правильный путь вставки за несколько секунд полного прайса оказался следующим.
sqlalchemy:
Патч выглядит так
Попытки вставки в цикле обычным insert привело к тому что 10 тыс. записей вставлялось примерно минут 15.
В общем правильный путь вставки за несколько секунд полного прайса оказался следующим.
sqlalchemy:
- class Price(base):
- __tablename__ = 'prices'
- ....
- s = session()
- buffer = []
- for item in items:
- ...
- buffer.append({'name':.., 'price':...})
- s.bulk_insert_mappings(Price, buffer)
- s.commit()
Так подсказывают делать все примеры и это правильно. Должен по идее выполниться pymysql.cursor.executemany(). Но как оказалось в последней версии pymysql есть ошибка, executemany не распознает конструкцию INSERT ... VALUES (%(name)s, %(price)s) и делает в цикле запрос на каждую запись, т.е. получаем те же тормоза.
После небольшого патча pymysql все встает на свои места.
Готовую версию можно взять так
- #!/bin/bash
- git clone https://github.com/WorldException/PyMySQL.git
- pip uninstall pymysql
- cd PyMySQL
- python setup.py install
Патч выглядит так
| pymysql/cursor.py -RE_INSERT_VALUES = re.compile(r"""(INSERT\s.+\sVALUES\s+)(\(\s*%s\s*(?:,\s*%s\s*)*\))(\s*(?:ON DUPLICATE.*)?)\Z""", +RE_INSERT_VALUES = re.compile(r"""(INSERT\s.+\sVALUES\s+)(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))(\s*(?:ON DUPLICATE.*)?)\Z""", |
ВНИМАНИЕ!
Мой патч приняли в основную ветку PyMySQL начиная с версии 0.7.2, так что вам достаточно обновиться!
Еще важный момент настройки MySQL который позволил мне избежать постоянных deadlock при параллельной вставке и ускорить вставку на порядок. Это разбивка таблицы на партиции по ключу, в моем случае это было имя прайса. Выглядит это примерно так:
PARTITION BY KEY (unikey) PARTITIONS 100
А так же
DELAY_KEY_WRITE=1
вторник, 25 марта 2014 г.
Отображение русских букв в TIpHtmlPanel freepascal
Требуется заменить одну строку в исходниках что бы заработало нормальное отображение кирилицы в компоненте.
И мой вам совет, используйте CodeTyphon от pilotlogic. Это очень удобная сборка freepascal со всеми немыслимыми компонентами.
IpHtml.pas
И мой вам совет, используйте CodeTyphon от pilotlogic. Это очень удобная сборка freepascal со всеми немыслимыми компонентами.
IpHtml.pas
procedure TIpHtml.Parse;
{$IFDEF IP_LAZARUS}
var
ch1,ch2,ch3: AnsiChar;
{$ENDIF}
begin
Getmem(TokenStringBuf, 65536); {!!.01}
try {!!.01}
CharSP := 0;
ListLevel := 0;
StartPos := CharStream.Position;
{$IFDEF IP_LAZARUS}
FDocCharset := 'UTF-8';//'ISO-8859-1';
вторник, 19 ноября 2013 г.
производительность xen и hyper-v для windows 2003 и 1C 7.7
Тестовые виртуалки Win2003 x64 ent + sql 2005 x64 std + 1cv7.7 sql
Тестировал на максимальную производительность с 1С 7-кой
Результаты проведения одного месяца
Citrix XEN 6.2
Две виртуалки: терминалка и SQL - 2:40 ч
Одна виртуалка SQL + 1C - 2:30
Оптимизация путем закрепления физических ядер за Dom0 и за каждым VCPU - 2:10 ч
HYPER-V 2012
Одна виртуалка SQL + 1C - 2:30 ч
Без использования виртуализации - 50 мин
Тестировал на максимальную производительность с 1С 7-кой
Результаты проведения одного месяца
Citrix XEN 6.2
Две виртуалки: терминалка и SQL - 2:40 ч
Одна виртуалка SQL + 1C - 2:30
Оптимизация путем закрепления физических ядер за Dom0 и за каждым VCPU - 2:10 ч
HYPER-V 2012
Одна виртуалка SQL + 1C - 2:30 ч
Без использования виртуализации - 50 мин
суббота, 2 ноября 2013 г.
Разгон core quad 9300
Зря я раньше относился к вопросу разгона компа с недоверием. Эффект очень положительный
Разогнал core quad 9300 2.5 GHz до 3 GHz и заодно поставил работать память в её максимальной частоте 800 МГц. Ну и на десерт собрал из 4 дисков рэйд 10 на встроенном в материнку рэйд контролере. при тестировании на скорость запись чтение он показа примерно 100МБ/с. Отзывчивость системы улучшилась в разы. Впринципе можно нормально жить без SSD
Разогнал core quad 9300 2.5 GHz до 3 GHz и заодно поставил работать память в её максимальной частоте 800 МГц. Ну и на десерт собрал из 4 дисков рэйд 10 на встроенном в материнку рэйд контролере. при тестировании на скорость запись чтение он показа примерно 100МБ/с. Отзывчивость системы улучшилась в разы. Впринципе можно нормально жить без SSD
четверг, 31 октября 2013 г.
Производительность XEN в примере 1С 7.7
В кратце.
Установлен Citrix XEN 6.2. Интересовала скорость проведения месяца.
1. Без виртуализации - 1 час
2. Без виртуализации на сервере только MSSQL, клиентская часть на компе в сети - 2 ч.
3. Xen с настройками по умолчанию - 2:30 ч
4. Xen с закрепленными ядрами за Dom0 и каждой виртуалкой - 2 ч
Интересно сколько выжмет VMWare и Hyper 2012...
Установлен Citrix XEN 6.2. Интересовала скорость проведения месяца.
1. Без виртуализации - 1 час
2. Без виртуализации на сервере только MSSQL, клиентская часть на компе в сети - 2 ч.
3. Xen с настройками по умолчанию - 2:30 ч
4. Xen с закрепленными ядрами за Dom0 и каждой виртуалкой - 2 ч
Интересно сколько выжмет VMWare и Hyper 2012...
Интересная особенность проброса Hasp key для 1С под Xen.
Пробовал пробросить ключи на двух серверах
HP DL380 G7
и
Manufacturer: Intel Corporation
Product Name: S2600GZ
Version: G11481-352
Serial Number: QSGR21500392
Сервер первый HP.
Несмотря на множество показанных USB контролеров, пробрасывается только все целиком. Т.е. можно пробросить только один ключ в одну виртуалку со всеми остальными портами и при этом ключ начинает работать только если его подключить через ВНЕШНИЙ УСБ ХАБ!!.
Сервер второй Intel
lspci показал всего два контролера УСБ и в итоге они успешно были проброшены в разные виртуалки и работают без всяких извращений и хабов. На серваке удалось так завести два ключа. Один серверный и пользовательский.
Пробовал пробросить ключи на двух серверах
HP DL380 G7
и
Manufacturer: Intel Corporation
Product Name: S2600GZ
Version: G11481-352
Serial Number: QSGR21500392
Сервер первый HP.
Несмотря на множество показанных USB контролеров, пробрасывается только все целиком. Т.е. можно пробросить только один ключ в одну виртуалку со всеми остальными портами и при этом ключ начинает работать только если его подключить через ВНЕШНИЙ УСБ ХАБ!!.
Сервер второй Intel
lspci показал всего два контролера УСБ и в итоге они успешно были проброшены в разные виртуалки и работают без всяких извращений и хабов. На серваке удалось так завести два ключа. Один серверный и пользовательский.
Подписаться на:
Сообщения (Atom)