В то время как я полагаю, что @spickermann отвечают на лучший подход, я предложил бы фиксацию для Вас метод.
Перемещение return
внешняя сторона map
цикл, но использование each
вместо этого, так как Вы определили пустые массивы для сбора элементов. Тогда возвратите эти два сортированных массива:
def size_splitter(array, size)
ary1 = []
ary2 = []
array.each do |word|
word.length == size ? ary1.push(word) : ary2.push(word)
end
return [ary1.sort, ary2.sort]
end
ary = %w|Tom Bob Greg Sam Sonny Thomas|
size_splitter(ary, 3)
#=> [["Bob", "Sam", "Tom"], ["Greg", "Sonny", "Thomas"]]
Лучший вариант - это просто сделать очевидную вещь здесь. Нет цикла или повторяющегося синхронизированного вызова; просто имейте обработчики, которые делают правильные вещи.
Держите под рукой центральный объект управления соединениями и заставляйте методы обработки событий передавать ему информацию, необходимую для продолжения работы. Когда он запустится, сделайте 5 исходящих подключений. Следите за тем, сколько из них выполняется, ведите список с ними в нем. При успешном подключении (в connectionMade
) обновите список, чтобы запомнить новое состояние подключения. Когда соединение завершается (в connectionLost
), сообщите диспетчеру соединений; его ответ должен заключаться в том, чтобы удалить это соединение и установить новое соединение в другом месте. Посередине,
Поскольку каждому из ваших клиентов необходимо обновить базу данных, инстинктивно я думаю, что я бы использовал пул соединений
- подробнее см. здесь (весь документ рекомендуется для некоторых важных шаблонов проектирования, которые часто возникают при использовании twisted).