Проверьте, происходит ли параллельное выполнение в Python

У меня есть следующий код, который использует селен, чтобы открыть 10 поисковых страниц Google и выполнить поиск по всем 10 поискам одновременно.

Я думаю, что он работает правильно (параллельно), но я не уверен, потому что он на самом деле, кажется, открывает 5 экземпляров браузера одновременно (однако, это может быть связано только с открытием графического интерфейса, я думаю).

Хотелось бы узнать, действительно ли это работает параллельно, или мне нужно также использовать ядра в процессоре (если это можно сделать?)

test.py

import unittest
from testsss import Testsss
from concurrent.futures import ThreadPoolExecutor

class Runner():

    def parallel_execution(self, *name):

        suite = unittest.TestSuite()

        for method in dir(Testsss):
            if (method.startswith('test_selenium')):
                print('testing')
                suite.addTest(Testsss(method))

        with ThreadPoolExecutor(max_workers=10) as executor:
            list_of_suites = list(suite)
            for test in range(len(list_of_suites)):
                test_name = str(list_of_suites[test])
                executor.submit(unittest.TextTestRunner().run, list_of_suites[test])

Runner().parallel_execution(Testsss)

Testsss.py

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest
import time

class Testsss(unittest.TestCase):
    print('ok3')
    def tearDown(self):
        self.driver.quit()
    @staticmethod    
    def selenium_test(self, testno):
        print('ok4')
        self.driver = webdriver.Firefox()
        self.driver.get("http://google.com")       
        search_field = self.driver.find_element_by_id("lst-ib")
        search_field.send_keys("Test " + str(testno) )
        search_field.submit()
        print("ok1")

    def test_selenium_1(self):
        Testsss.selenium_test(self,1)

    def test_selenium_2(self):
        Testsss.selenium_test(self, 2)

    def test_selenium_3(self):
        Testsss.selenium_test(self, 3)

    def test_selenium_4(self):
        Testsss.selenium_test(self, 4)        

    def test_selenium_5(self):
        Testsss.selenium_test(self, 5)        

    def test_selenium_6(self):
        Testsss.selenium_test(self, 6)        

    def test_selenium_7(self):
        Testsss.selenium_test(self, 7)        

    def test_selenium_8(self):
        Testsss.selenium_test(self, 8)        

    def test_selenium_9(self):
        Testsss.selenium_test(self, 9)        

    def test_selenium_10(self):
        Testsss.selenium_test(self, 10)

1 ответ

Решение

Если вы работаете в Linux, вы можете использовать top Команда оболочки для просмотра запущенных процессов. Когда открыт, если вы нажмете Shift-H это покажет вам темы. Запустите программу во время просмотра topи вы должны увидеть несколько потоков Python, работающих под одним родительским потоком. Если так, это работает.

Другие вопросы по тегам