Написал простую звонилку на Python
Обзванивает 1000 номеров за 2 часа и 20 минут.
Может кому пригодиться
Обзванивает 1000 номеров за 2 часа и 20 минут.
Может кому пригодиться
Python:
# _*_ coding: utf-8 _*_
import os
import time
import serial
from queue import *
from threading import Thread
base = "phonebase.txt"
result_temp = "Result"
thread_count = 1
port = input('Введите адрес порта: ')
print('<<<****>>> Проверяю соединение с модемом <<<****>>>\n')
phone = serial.Serial(port, 115200, timeout=5)
time.sleep(1)
print('Модем успешно подключен\n')
time.sleep(1)
print('Приступаю к выполнению обзвона базы\n')
def callphone(phonebase):
try:
time.sleep(1.5)
phone.write(b'ATZ\r\n') # Команда для заводских настроек
time.sleep(1)
phone.write(b'ATD' + phonebase.encode() + b';\r\n') # Команда для набора номера
time.sleep(5.5)
call_reset = phone.write(b'AT+CHUP\r\n') # Сброс звонка после заданного тайм аута
time.sleep(0.2)
if call_reset > 0:
i = "Good"
return [True, i]
except:
return False, None
return False, None
def run(queue, result_queue):
# Цикл продолжается пока очередь задач не станет пустой
while not queue.empty():
# получаем первую задачу из очереди
phonebase = queue.get_nowait()
# проверяем статус звонка
status = callphone(phonebase)
# сохраняем результат для дальнейшей обработки
result_queue.put_nowait((status, phonebase))
# сообщаем о выполнении полученной задачи
queue.task_done()
print('{} finished result = {}'.format(phonebase, status))
def main():
start_time = time.time()
# Для получения задач и выдачи результата используем очереди
queue = Queue()
result_queue = Queue()
fr_success = os.path.join(result_temp, "good.txt")
fr_errors = os.path.join(result_temp, "error.txt")
# Сначала загружаем все номера
with open(base) as f:
for line in f:
queue.put(line.strip())
# Затем запускаем необходимое количество потоков
for i in range(thread_count):
thread = Thread(target=run, args=(queue, result_queue))
thread.daemon = True
thread.start()
# И ждем, когда задачи будут выполнены
queue.join()
# После чего пишем результаты в файлы
with open(fr_success, 'w') as fs, open(fr_errors, 'w') as fe:
while not result_queue.empty():
status, phones = result_queue.get_nowait()
if status[0]:
f = fs
else:
f = fe
f.write('{} >> {}'.format(phones, status[1]))
f.write('\n')
total_time = (time.time() - start_time)
times = time.strftime("%H:%M:%S", time.gmtime(total_time))
print("Время выполнения программы заняло: " + times + "\n")
print('Обзвон базы выполнен')
if __name__ == '__main__':
main()