LINUX.ORG.RU

Странное поведение DRb. Приветствуется мнение спецов и телепатов

 ,


0

0

В общем треды в Руби говно (1, 2). Пришлось заюзать процессы. Но процессам нужно между собой как-то общаться. Для этого в рубях придумалинаписали DRb. Такой себе IPC «для бедных» (c) для богатых(потому что есть небольшой overhead) неосиляторов как я (наверно здесь должен быть смайлик, но я не уверен какой лучше: грустный или веселый).

Хватит сказок, пора к делу. Если кто помнит у меня есть таски без и с зависимостями. Так вот таски без зависимостей мой велосипед щелкает как орехи, а как только встречает с зависимостями сразу же сыплет трейсами но не сдается^W^W^W и висит.

Еще ньюанс - если в предыдущей «сессии» «удовлетворить» все зависимости таска, а в следующей запустить только его то все ОК. Но это ничего не значит ибо проверка зависимостей, выполненых в предыдущей сессии и выполняемых в поточной происходит в разных методах (prev vs curr)

Как-то так. Если что-то непонятно, то спрашивайте ибо я мастер объяснить что-нибуть простое архи запутанно.

Сама ошибка в примере когда запускаются таски с 1 по 4; №1 и №2 есть зависимостями №3

vv@vv-Latitude-E5520 ~/work/own/ruby/portage3/bin $ ./03_fill_db.rb -u 4
/usr/lib/ruby/1.9.1/drb/drb.rb:585:in `load': incompatible marshal file format (can't be read) (/usr/lib/ruby/1.9.1/drb/drb.rb:573:in `load'TypeError)
: 	format version 4.8 required; 0.0 giventoo large packet 67654656
 (DRb::DRbConnError	from /usr/lib/ruby/1.9.1/drb/drb.rb:585:in `block in load'
)
	from <internal:prelude>:10:in `synchronize'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:632:in `recv_reply'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:581:in `load'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:918:in `recv_reply'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:632:in `recv_reply'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1197:in `send_message'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:918:in `recv_reply'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1088:in `block (2 levels) in method_missing'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1197:in `send_message'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1172:in `open'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1088:in `block (2 levels) in method_missing'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1087:in `block in method_missing'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1172:in `open'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1105:in `with_friend'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1087:in `block in method_missing'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1086:in `method_missing'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1105:in `with_friend'
	from /home/vv/work/own/ruby/portage3/lib/common/runner.rb:34:in `initialize'
	from /usr/lib/ruby/1.9.1/drb/drb.rb:1086:in `method_missing'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:218:in `new'
	from /home/vv/work/own/ruby/portage3/lib/common/runner.rb:34:in `initialize'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:218:in `block in run_task'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:218:in `new'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:216:in `fork'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:218:in `block in run_task'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:216:in `run_task'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:216:in `fork'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:79:in `block in run_specified_tasks'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:216:in `run_task'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:76:in `map!'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:79:in `block in run_specified_tasks'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:76:in `run_specified_tasks'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:76:in `map!'
	from ./03_fill_db.rb:100:in `<main>'
	from /home/vv/work/own/ruby/portage3/lib/common/scheduler.rb:76:in `run_specified_tasks'
	from ./03_fill_db.rb:100:in `<main>'

★★★★★

но не сдается^W^W^W и висит.

уже разобрался. Process.wait нужно было почаще делать :)

а ответ на вот этот вопрос

сыплет трейсами

еще актуальный

ZuBB ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.