LINUX.ORG.RU

Сообщения ZuBB

 

Проблеми с условиями для остановки тредов

Форум — Development

Вот код главного скрипта. Он используется как пускалка для скриптов которые пишут в базу (fillers). Часто, при непонятных обстоятельствах получаю для нескольких (от 1 до 6-8 из 26(это мой тестовый набор; потому что отрабатывает быстро)) filler`ов обрезанный лог такого типа

# Logfile created on 2012-08-08 09:54:04 +0300 by logger.rb/31641
[2012-08-08 09:54:04]  INFO: Passed queries:
[2012-08-08 09:54:04]  INFO: ----------------------------------------------------------------------
[2012-08-08 09:54:04]  INFO: INSERT INTO sources (source) VALUES (?);
[2012-08-08 09:54:04]  INFO: ----------------------------------------------------------------------
08_sources.log lines 1-5/5 (END)

вместо следующего нормального

# Logfile created on 2012-08-06 00:28:57 +0300 by logger.rb/31641
[2012-08-06 00:28:57]  INFO: Passed queries:
[2012-08-06 00:28:57]  INFO: ----------------------------------------------------------------------
[2012-08-06 00:28:57]  INFO: INSERT INTO sources (source) VALUES (?);
[2012-08-06 00:28:57]  INFO: ----------------------------------------------------------------------
[2012-08-06 00:28:59]  INFO: =================================== SUMMARY ===================================
[2012-08-06 00:28:59]  INFO: Time elapsed: 2.009950587 seconds
[2012-08-06 00:28:59]  INFO: Total amount of jobs for processing: 29
[2012-08-06 00:28:59]  INFO: Successful inserts: 29
[2012-08-06 00:28:59]  INFO: Faileddddd inserts: 0

чтобы избежать сего бага (логи мне нужны) добавил епический костыль в виде sleep`а. но так так я не уверен был где баг(и), sleep'ы я добавил в оба модули (database, строка 120 и 127; logger, строка 113), которые ждут завершения работы основных тредов (все тот же main script, строки 51-55)

В модуль работы с базой я добавил слип потому что раньше у меня всплывал следующий баг

vv@crusader ~/work/own/python/portage3/bin/db_population $ rm /dev/shm/test-20120724-221542/35_ebuild_descriptions_p3.log && ./35_ebuild_descriptions_p3.rb && cat /dev/shm/test-20120724-221542/35_ebuild_descriptions_p3.log
15837
25013
5832
# Logfile created on 2012-07-25 13:01:31 +0300 by logger.rb/31641
[2012-07-25 13:01:36 +0300] ERROR: Message: cannot use a closed statement
[2012-07-25 13:01:36 +0300] ERROR: Values: [3133, 14891]
[2012-07-25 13:01:36 +0300] ERROR: Message: cannot use a closed statement
[2012-07-25 13:01:36 +0300] ERROR: Values: [3134, 17036]
[2012-07-25 13:01:36 +0300] ERROR: Message: cannot use a closed statement
[2012-07-25 13:01:36 +0300] ERROR: Values: [3134, 17037]
[2012-07-25 13:01:36 +0300] ERROR: Message: cannot use a closed statement
[2012-07-25 13:01:36 +0300] ERROR: Values: [3135, 10195]
[2012-07-25 13:01:36 +0300] ERROR: Message: cannot use a closed statement
[2012-07-25 13:01:36 +0300] ERROR: Values: [3135, 10198]
[2012-07-25 13:01:36 +0300] ERROR: Message: cannot use a closed statement
[2012-07-25 13:01:36 +0300] ERROR: Values: [3135, 10203]
[2012-07-25 13:01:36 +0300] ERROR: Message: cannot use a closed statement
[2012-07-25 13:01:36 +0300] ERROR: Values: [3136, 3514]
[2012-07-25 13:01:36 +0300] ERROR: Message: cannot use a closed statement
[2012-07-25 13:01:36 +0300] ERROR: Values: [3137, 14993]
[2012-07-25 13:01:36 +0300] ERROR: Some ebuilds(25013 items) miss its description
vv@crusader ~/work/own/python/portage3/bin/db_population $

Сейчас его вроде как нет, но я не уверен что он не «прячется» за другим(и) багами связанными с тредами

Зато сейчас (как и раньше) «редко но метко» выскакивает следующий баг

/home/vv/work/own/python/portage3/lib/common/script.rb:110:in `join': deadlock detected (fatal)
	from /home/vv/work/own/python/portage3/lib/common/script.rb:110:in `block in run_workers'
	from /home/vv/work/own/python/portage3/lib/common/script.rb:110:in `each'
	from /home/vv/work/own/python/portage3/lib/common/script.rb:110:in `run_workers'
	from /home/vv/work/own/python/portage3/lib/common/script.rb:52:in `fill_table_X'
	from /home/vv/work/own/python/portage3/lib/common/script.rb:39:in `initialize'
	from ././db_population/14_packages.rb:21:in `new'
	from ././db_population/14_packages.rb:21:in `<main>'

Я не уверен связан ли он с моей проблемой логгирования, но «раз ж пошла такая пьянка..» (с)

Буду благодарен за дельные советы

cast Anatolik (по мотивам сего коммента)

 , ,

ZuBB
()

Игнорирование тегов работает неправильно

Форум — Linux-org-ru

У меня

Избранные теги gentoo

Игнорированные теги kde kde4

Пришло уведомление на тред KDE Нет звука. в нем теги: gentoo, kde

я думаю что приоритет у blacklist должен быть больше чем у whitelist

 

ZuBB
()

Обьясните почему не работает constraint

Форум — Development
sqlite> create table flags (
   ...>     id INTEGER,
   ...>     name VARCHAR NOT NULL,
   ...>     descr VARCHAR DEFAULT NULL,
   ...>     type_id INTEGER NOT NULL,
   ...>     live INTEGER NOT NULL DEFAULT 1,
   ...>     package_id INTEGER DEFAULT NULL,
   ...>     FOREIGN KEY (type_id) REFERENCES flag_types(id),
   ...>     FOREIGN KEY (package_id) REFERENCES packages(id),
   ...>     CONSTRAINT idx1_unq UNIQUE (name, descr, package_id),
   ...>     PRIMARY KEY (id)
   ...> );
sqlite> 
sqlite> select * from flags where name='x86' limit 2;
7647|x86||1|0|
7648|x86||1|0|
sqlite> select package_id from flags where name='x86' limit 2;


sqlite> select count(id) from flags where descr is NULL and name='x86' and package_id is NUll;
598
sqlite> 

почему строчек с "x86" так многобольше одной?

 ,

ZuBB
()

удалите рекламу

Форум — Linux-org-ru

 

ZuBB
()

не работает кнопка 'cancel' в форме редактирования комментария

Форум — Linux-org-ru

сабж

 

ZuBB
()

/var/db/pkg/${category}/${package}-${version}/*

Форум — General

прошу помочь в идентификации файлов из «сабжевой» директории, а то я немогу нагуглить ничего хорошего

crusader pkg # ls -1 */*/* | sed 's:.*/::' | grep -v ebuild | sort -u
BINPKGMD5        -     [got answer] http://bit.ly/OWQSbJ
BUILD_TIME       -     время окончания сборки
CATEGORY         -     CATEGORY
CBUILD           -     CBUILD
CC               -     c compiler
CFLAGS           -     CFLAGS
CHOST            -     CHOST
CONTENTS         -     содержимое установленного приложения
COUNTER          -     [got answer] http://bit.ly/PyKoue
CTARGET          -     CTARGET
CXX              -     CXX
CXXFLAGS         -     CXXFLAGS
DEBUGBUILD       - ???
DEFINED_PHASES   -     все фазы сборки для установленного приложения
DEPEND           - ??? все зависимости
DESCRIPTION      -     descr
EAPI             -     eapi
environment.bz2  -     архив всех переменных на момент сборки
FEATURES         - ??? все features
HOMEPAGE         -     список homepages
INHERITED        -     все eclasses установленного приложения
IUSE             - ??? какой то набор флагов
KEYWORDS         -     все кейворды установленного приложения
LDFLAGS          -     LDFLAGS сборки
LICENSE          -     все лицензии установленного приложения
NEEDED           - ??? какой то список so файлов
NEEDED.ELF.2     - ??? какой то список so файлов
PDEPEND          -     Post-Merge Dependencies
PF               -     Full package name
PKGUSE           - ??? какой то набор флагов
RDEPEND          -     runtime depends
repository       -     репозиторий к которому пренадлежит установленное приложение
REQUIRED_USE     - ??? какой то набор флагов
RESTRICT         -     запрещенные features
SIZE             -     размер собранного приложения
SLOT             -     слот установленного приложения
USE              - ??? какой то набор флагов

Подскажите на счет всех файлов напротив которых есть "???", а также такие где я ошибся

 ,

ZuBB
()

Подозрение на 2 учетки от одного юзера

Форум — Linux-org-ru

здесь

@модерам: прошу не пороть горячку. хотелось бы узнать от автора ответ на мой вопрос по поводу портажа

ZuBB
()

удалите рекламу

Форум — Linux-org-ru
ZuBB
()

время выполнения запроса

Форум — Development

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

гугл говорит что такое возможно. но это комманда для sqlite`ной консоли. а мне нужно выполнить ее через bindings.

Какие есть варианты сделать то что я хочу, или мне «забить» на сию хотелку?

 , ,

ZuBB
()

tmux не использует все доступное пространство в терминале

Форум — General

как то так. самая правая часть (где точки) сама по себе. кто-то сталкивался с подобным?

юзается версия 1.5 (генту)

 ,

ZuBB
()

Можна ли сделать портаж быстрее?

Форум — Talks
crusader portage # pwd
/usr/lib/portage/pym/portage
crusader portage # eix -c ^portage$
[I] sys-apps/portage (2.2.0_alpha118@07/27/2012): Portage is the package management and distribution system for Gentoo
crusader portage # grep 'been called' versions.py
	print '`vercmp` has been called'
crusader portage # emerge -1 sys-apps/portage | grep -c 'been called'
689
crusader portage # 

Для справки: строчка была добавлена в функцию которая отвечает за сортировку версий пакетов..

 , , ,

ZuBB
()

уже в понедельник голова не работает; нужна подсказка

Форум — Development

какие различия в коде который создает треды? кроме того что 1й код работает, так еще в консоли есть строки «in thread block», а после выполнения второго кода этих строк нету

где я туплю?

require 'thread'
class Pool
    def initialize(size)
        @size = size
        @jobs = Queue.new

        @pool = Array.new(@size) do |i|
            print "in array loop\n"
            Thread.new do
                print "in thread block\n"
                Thread.current[:id] = i

                catch(:exit) do
                    loop do
                        job, args = @jobs.pop
                        job.call(*args)
                    end
                end
            end
        end
    end

    def schedule(*args, &block)
        @jobs << [block, args]
    end

    def shutdown
        @size.times do
            schedule { throw :exit }
        end

        @pool.map(&:join)
    end
end

p = Pool.new(2)

20.times do |i|
    p.schedule do
        sleep rand(4) + 2
        puts "Job #{i} finished by thread #{Thread.current[:id]}"
    end
end

at_exit { p.shutdown }

#!/usr/bin/env ruby
require 'thread'
2.times do |i|
    print "in array loop\n"
    Thread.new do
        print "in thread block\n"
        #Thread.abort_on_exception = true
        #Thread.current['id'] = i
        #Thread.current['count'] = 0

        while true do
            print 'thread:'+i.to_s
        end
    end
end

 ,

ZuBB
()

ConditionVariable.wait: 1.8 vs 1.9

Форум — Development

обьясните мне почему код метода wait так отличается между версиями

1.8

def wait(mutex)
  begin
    mutex.exclusive_unlock do
      @waiters.push(Thread.current)
      Thread.stop
    end
  ensure
    mutex.lock
  end
end

1.9

def wait(mutex, timeout=nil)
  begin
    # TODO: mutex should not be used
    @waiters_mutex.synchronize do
      @waiters.push(Thread.current)
    end
    mutex.sleep timeout
  ensure
    @waiters_mutex.synchronize do
      @waiters.delete(Thread.current)
    end
  end
  self
end

как по мне то автор кода для ветки 1.9 явно что-то курил

все что удалось нагуглить — это ссылка в багзилле

 condition variable, ,

ZuBB
()

Подскажите ЯП с норм тредами

Форум — Development

Пилю тут потихонечку одну софтинувелосипед. Медленно продвигаюсь вперед, но столкнулся с одной проблемой.. Уже сейчас ввод данных в базу занимает почти 2 часа. И это при том что

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

Думал что потоки мне помогут, но как оказалось нет. С увеличением количества потоков время на ввод почти не уменьшалось

В комментах к сему посту прочитал что сколько бы я тредов не сделал они все равно будут выполнятся на одном ядре (как в питоне так и в руби).

Посему вопрос: что делать дальше? Вижу несколько вариантов

  • переписать часть которая отвечает за ввод данных на ЯП в котором все ок с тредами
  • написать (на руби (потому что он уже используется)) небольшой сервер который будет принимать данные на морду и писать в базу. и запускать несколько копий приложений для обработки. каждое работает со своей частью данных, а результаты отдает серверу
  • тоже самое что и в предыдущем пункте но на питоне. потому что портаж на питоне и мне в любом случае будет нужно его API

Или есть другие варианты? а может я гдето сделал ошибку в моем коде?

 , , ,

ZuBB
()

Как бороться с «unable to close due to unfinalised statements»

Форум — Development

Есть следующий кусок кода

#!/usr/bin/env ruby
# encoding: UTF-8
#
# Here should go some comment
#
require 'rubygems'
require 'sqlite3'

database = SQLite3::Database.new('/dev/shm/test-20120625-124831.sqlite')
database.transaction()

a = ['some', 'some', 'extra']
query = 'insert into architectures (architecture) values (?)'

a.each { |arch|
    begin
        statement = database.prepare(query)
        statement.bind_params(arch)
        statement.execute() 
    rescue SQLite3::Exception => exception
        puts "Database error happened"
        puts "Message: #{exception.message()}"
        puts "Sql query: #{query}"
        puts "Value: #{arch}"
    end
    #p statement.methods.sort
    #statement.close
}

database.commit()
database.close()

при его запуске получаю следующий выхлоп

vv@vv-Latitude-E5520 /tmp $ ruby statement_test.rb 
Database error happened
Message: column architecture is not unique
Sql query: insert into architectures (architecture) values (?)
Value: some
statement_test.rb:34:in `close': unable to close due to unfinalised statements (SQLite3::BusyException)
	from statement_test.rb:34
vv@vv-Latitude-E5520 /tmp $ 

что нужно сделать со statement для второго item чтобы безопасно закрыть базу? close не работает. если убрать дубль «some» — то все работает.

не предлагать

  • удалять дубли перед инсертом
  • заменить insert на insert or ignore или сделать поле не уник

 , , ,

ZuBB
()

Линукс для старого компьютера

Форум — Linux-install

посоветуйте линукс для P-III/750 256мб рамы. из коробки нужен pdf reader, mailer, browser, pptp, офис (очень желательно с поддержкой .doc), media player + codecs.

ах да, с инетом в том месте туго

ZuBB
()

Вышла новая версия Geany

Новости — Open Source
Группа Open Source

18 июня разработчики представили новую версию легковесного редактора Geany — 1.22.

Некоторые из изменений:

  • Переделана поддержка тем. Старые темы и файлы для подсветки синтаксиса не совместимы с новой версией редактора.
  • Обновлен движок редактирования Scintilla до версии 2.29.
  • Полная поддержка PCRE-совместимых регулярных выражений для поиска и замены.
  • Добавлена поддержка синтаксиса для Objective-C от Elias Pschernig.
  • Возможность открытия сессии по умолчанию (если активирована соответствующая опция).
  • Исправлены ошибки в распознавании неформатированных строк (raw strings) в C/C++.
  • Улучшена поддержка встраиваемых в HTML типов данных.
  • Добавлены следующие переводы: арабский, индонезийский, литовский, монгольский, новонорвежский, словацкий.
  • Обновлены переводы.

Детальный список изменений можно прочитать в примечании к выпуску.

Изменение версии
Много пользователей обращало внимание разработчиков на то, что по их мнению номер версии не соответствует зрелости проекта. После непродолжительной дискуссии они решили переименовать версию 0.22 в 1.22.

Скачать

>>> Подробности

 , ,

ZuBB
()

запись в sqlite базу из многопоточного приложения

Форум — Development

есть многопоточное приложение. оно пишет в sqlite базу. Здесь нет ничего сложного, так как sqlite поддерживает multiple connections. Но есть одно но. часто после вставки нужно взять last inserted id.

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

если это имеет значение - использую ruby

 ,

ZuBB
()

Переписать запрос с использованием distinct

Форум — Development

Ради спортивного интереса хотел бы видеть следуюющий запрос с использованием distinct а то я чтото не осилил..

select
	* 
from
	tmp_app_guids2modules bt
group by 
	bt.app_guid,
	bt.app_platform,
	bt.app_version,
	bt.module_guid;

таблица

+------------------+-----------+------+-----+---------+-------+
| Field            | Type      | Null | Key | Default | Extra |
+------------------+-----------+------+-----+---------+-------+
| app_guid         | char(36)  | YES  | MUL | NULL    |       |
| app_platform     | char(16)  | YES  |     | NULL    |       |
| app_version      | char(16)  | YES  |     | NULL    |       |
| app_name         | char(128) | YES  |     | NULL    |       |
| app_id_string    | char(128) | YES  |     | NULL    |       |
| module_guid      | char(36)  | YES  |     | NULL    |       |
| module_name      | char(128) | YES  |     | NULL    |       |
| module_id_string | char(128) | YES  |     | NULL    |       |
+------------------+-----------+------+-----+---------+-------+

 distinct, ,

ZuBB
()

get name of class when calling super

Форум — Development

сразу извиняюсь за заглавие на буржуйском. как искал в гугле - так и скопипастил сюда

есть код

class A
  def initialize()
    p 'in A#init:' + self.class.name
  end
end
class B < A
  def initialize()
    p 'in B#init:' + self.class.name
    super
  end
end

output

«in B#init:B» «in A#init:B»

а что нужно исправить чтобы получить «правильную» 2ю строчку?

 ,

ZuBB
()

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