Processamento multithreading
unknown
python
2 years ago
3.4 kB
11
Indexable
import multiprocessing
import time
import tracemalloc
from time import sleep
from applicationrpa.selenium import ChromeDriver
from selenium.webdriver.common.by import By
import utils
from logger import log
# Habilitar o tracemalloc
tracemalloc.start()
# Função que será executada em cada processo
def worker_function(process_id, sublist):
# Função de teste
driver = ChromeDriver(['--headless', '--disable-extensions', '--disable-notifications', '--disable-dev-shm-usage'],
initial_url=utils.get_auth_url())
log(f"Processo {process_id} iniciado... {driver.driver.current_url}")
i = 0
for value in sublist:
i += 1
driver.driver.get(utils.get_at_acq_url())
try:
driver.find_element(
By.XPATH,
'//*[@id="wizard-p-0"]/fieldset[1]/div[1]/input',
exception=True,
retries=3,
interval=1
).send_keys(value)
except Exception as e:
log(f"#{i}/{len(sublist)} Processo {process_id} ... [ {driver.driver.title} - {e} ]")
continue
text = driver.find_element(
By.XPATH,
'/html/body/table[1]/tbody/tr/td[3]/table/tbody/tr/td[1]/span',
exception=False,
retries=3,
interval=1
)
sleep(0.5)
user_test = text.text if text is not None else None
log(f"#{i}/{len(sublist)} Processo {process_id} ... [ {driver.driver.title} - {user_test} ]")
log(f"Processo {process_id} finalizado...")
driver.quit()
def main():
# Habilitar o tracemalloc para capturar o consumo de memória
tracemalloc.start()
start_time = time.time()
# Crie uma lista com 331 elementos (Simular uma lista de 331 processos)
original_list = []
for i in range(331):
original_list.append(f'teste-{i}')
# Divida a lista original em {div_value} sublistas
div_value = 1
# Calcule o tamanho das sublistas
sublist_size = len(original_list) // div_value
remaining_elements = len(original_list) % div_value
sublists = []
start = 0
for i in range(div_value):
sublist_end = start + sublist_size + (1 if i < remaining_elements else 0)
sublists.append(original_list[start:sublist_end])
start = sublist_end
# Execução dos processos em paralelo
processes = []
process_id = 0
for sublist in sublists:
process_id += 1
# Crie um processo para cada sublista
process = multiprocessing.Process(target=worker_function, args=(process_id, sublist,),
name=f"Processo {process_id}")
processes.append(process)
# Inicie o processo
process.start()
# Aguarde todos os processos terminarem
for process in processes:
process.join()
print("--- %s seconds ---" % (time.time() - start_time))
# Capturar o consumo de memória
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
for stat in top_stats[:10]:
log(stat)
# Desabilitar o tracemalloc
tracemalloc.stop()
log("Todos os processos terminaram")
if __name__ == "__main__":
main()
Editor is loading...