безопасно использовать потоки и рубин? - PullRequest
2 голосов
/ 24 мая 2009

Кто-нибудь когда-нибудь видел много ошибок, подобных этой:

Exception `Net::HTTPBadResponse' at /usr/lib/ruby/1.8/net/http.rb:2022
- wrong status line: _SOME HTML CODE HERE_

При использовании резьбы и механизации? Я относительно уверен, что это плохое поведение между потоками и библиотекой net/http, но кто-нибудь есть какие-либо советы, насколько верхний предел потоков вы хотите запустить сразу при использовании mechanize / nethttp? И как я могу зафиксировать такого рода исключения, потому что rescue Net::HTTPBadResponse не работает?

Ответы [ 3 ]

1 голос
/ 24 мая 2009

Это может быть что-то не-потокобезопасное в Mechanize, но я могу вспомнить другие ошибки, которые могут вызвать ту же проблему. Я бы начал с отключения постоянных соединений, если вы их используете. Следующее, что нужно сделать, это посмотреть на свой код и убедиться, что вы осторожны с объектами, с которыми вы работаете. Если в вашем приложении есть несколько потоков, использующих общие объекты, это может привести к поломке библиотеки, которая в противном случае была бы поточно-ориентированной.

Если где-то есть проблема с многопоточностью, верхний предел потоков, которые вы можете безопасно использовать, равен 1. Больше, и вы просто соглашаетесь с тем, как часто вы хотите, чтобы проблема возникла, а не как она происходит или нет.

0 голосов
/ 15 марта 2016

Согласно этому письму самого Аарона Паттерсона , если вы не делите агента между потоками, у вас должно быть все в порядке.

ИМХО, это означает, что Механизация не является поточно-ориентированной.

0 голосов
/ 02 декабря 2010

Основываясь на моем изнурительном опыте этим вечером, я попытался запустить две задачи на основе механизации одновременно в Event Machine и этот несколько древний обмен , нет, похоже, он не поточно-ориентированный.

...