Я ищу способ, чтобы мои потоки могли проходить через массив адресов электронной почты, не наступая друг на друга и не меняя переменные (я не могу использовать мьютексы). Я нашел некоторую информацию об использовании «локальных переменных потока», но не может показаться, что это работает. Ниже приведен пример моей проблемы (это всего лишь небольшой патрон кода).Threading and Looping in Ruby
(1..(threads).map { |thread_count|
Thread.new do
(1..(messages).each do |message_count|
email = recipients_array[recipient_count].join(", ")
if (recipient_count != (recipients_array.length - 1))
recipient_count += 1
else
recipient_count = 0
end
Я застрял на этом некоторое время. Я пишу скрипт, который использует многопоточность в JRuby для отправки электронной почты. Я рассказываю сценарию, сколько потоков я хочу отправить и сколько сообщений в потоке я собираюсь отправить. Я передаю текстовый файл адресов получателей, которые загружаются в массив. Затем я хочу, чтобы перебирать массив таким образом, чтобы:
- Тема 1, сообщение 1 будет идти по электронной почте 1
- тему 2, сообщение 1 будет идти по электронной почте 1
- Тема 1, сообщение 2 будет идти по электронной почте 2
- тему 2, сообщение 2 будет идти по электронной почте 2
и так далее ... Это начинается хорошо, но если я устанавливаю, чтобы сделать 5 х 5 нитей сообщения:
- Темы с 1 по 5, 1 сообщение будет идти по электронной почте 1
- тему 1, 2 Сообщение будет идти по электронной почте 6
, потому что все они доступ к recipient_count переменной и приращением ее +1.
Ищете рекомендации относительно того, как лучше настроить это.
Что такое 'recipient_count'? где он интуитивно понятен? кажется, у вас может быть состояние гонки здесь ... –
Это запах преждевременной оптимизации. Сколько писем вам нужно отправлять в секунду? Пробовали ли вы проверить, может ли один поток оставаться впереди ваших потребностей? –
@theTinMan, Должен быть многопоточным, к сожалению – Fance