Как посчитать сумму из результатов разных потоков?

Alisa Bodrova

Client
Регистрация
08.12.2023
Сообщения
277
Реакции
94
Баллы
28
Добрый день.

Есть рассыльщик писем. В нем можно подключиться к профилю и задать количество писем, которое надо отправить за одно подключение.

В рассыльщике есть счетчик, который выводит в лог количество писем, отправленных конкретным профилем.

ВОПРОС: как посчитать общее количество отправленных писем, совершаемых всеми потоками? Результат надо выводить в лог каждое +1 письмо. Либо выводить в лог общую сумму отправленных писем, при завершении каждого потока.

Например, надо отправить 10 писем за один вход в аккаунт. В одном потоке 5 аккаунтов, а потоков 20.
 
Последнее редактирование:
1. Глобальная переменная
2. База данных - увеличиваем счётчик, читаем его, выводим в лог / Пишем строку по успешной отправке, считаем количество строк
3. Список привязанный к файлу - пишем в него строку по успешной отправке, считаем количество строк, выводим в лог
4. Файл в котором лежит значение количества успешных отправок, привязываем его к переменной, увеличиваем значение по отправке, сохраняем в тот же файл, выводим в лог
 
  • Спасибо
Реакции: Alisa Bodrova
1. Глобальная переменная
2. База данных - увеличиваем счётчик, читаем его, выводим в лог / Пишем строку по успешной отправке, считаем количество строк
3. Список привязанный к файлу - пишем в него строку по успешной отправке, считаем количество строк, выводим в лог
4. Файл в котором лежит значение количества успешных отправок, привязываем его к переменной, увеличиваем значение по отправке, сохраняем в тот же файл, выводим в лог
ох... сколько всего)) спасибо за наводку, буду разбираться
 
Реализовала с помощью глобального счетчика. Вот шаблон, если кому-то понадобится
 

Вложения

  • Спасибо
Реакции: user_agent
Реализовала с помощью глобального счетчика. Вот шаблон, если кому-то понадобится
без локирования это будет работать неправильно в многопотоке.
а сброс счетчика как реализован ? перезапуском Зеннопостера ?
 
  • Спасибо
Реакции: Alisa Bodrova
без локирования это будет работать неправильно в многопотоке.
а сброс счетчика как реализован ? перезапуском Зеннопостера ?
Можно поподробнее про "сброс счетчика перезапуском Зеннопостера" пожалуйста
 
Можно поподробнее про "сброс счетчика перезапуском Зеннопостера" пожалуйста
даже незнаю что тут можно добавить... подробного...
глобалки живут пока живет программа зеннопостер... больше добавить нечего
 
без локирования это будет работать неправильно в многопотоке.
а сброс счетчика как реализован ? перезапуском Зеннопостера ?
точно...)) вот сейчас с этим и столкнулась

кстати, в многопотоке работает правильно, а вот сброс я не продумала
 
Последнее редактирование:
даже незнаю что тут можно добавить... подробного...
глобалки живут пока живет программа зеннопостер... больше добавить нечего
то есть глобалка типа обнуляется при запуске первого потока проекта в ZP, а второй поток уже видит ее с некоторым значением, присвоенным ей в первом потоке?
 
то есть глобалка типа обнуляется при запуске первого потока проекта в ZP, а второй поток уже видит ее с некоторым значением, присвоенным ей в первом потоке?
не обнуляется
и не при запуске.

закрыл ЗП, глобалки исчезли. а уж как сделана инициализация глобалок при запуске... это уже дело того кто реализует свою логику.
 
  • Спасибо
Реакции: eee
то есть глобалка типа обнуляется при запуске первого потока проекта в ZP, а второй поток уже видит ее с некоторым значением, присвоенным ей в первом потоке?
в моем варианте обнуляется при перезапуске программы, но продолжает вести счет при добавлении новых потоков
 
  • Спасибо
Реакции: user_agent и eee
Создайте список. Привяжите к файлу.
Добавляйте туда строчки после отправки письма.
И дальше просто считайте количество строк.
Если список будет расти - тогда просто суммируете количество строк, очищаете список, записываете туда строку с суммой.
Как-то так я бы решал на коленке, если не нужно было бы использовать базу.

Глобальные переменные не использовал бы - так как при закрытии зенно счётчик обнулится (потеряется состояние).
 
  • Спасибо
Реакции: Alisa Bodrova

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)