检查 Python 中是否发生并行执行
Check if parallel execution is happening in Python
我有以下代码,它使用 selenium 打开 10 个 google 搜索页面并同时搜索所有 10 个搜索。
我认为它运行正确(并行),但我不确定,因为它实际上似乎一次打开浏览器的 5 个实例(但是,这可能只与 gui 打开 I猜测)。
很想知道这是否真的 运行 并行,或者我是否也需要使用 CPU 中的核心(如果可以做到?)
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)
如果您在 Linux 上 运行,您可以使用 top
shell 命令查看 运行 进程。打开时,如果您按 Shift-H
,它将显示线程。在观看 top
的同时 运行 程序,您应该会在一个父线程下看到多个 python 线程 运行。如果是这样,它正在工作。
我有以下代码,它使用 selenium 打开 10 个 google 搜索页面并同时搜索所有 10 个搜索。
我认为它运行正确(并行),但我不确定,因为它实际上似乎一次打开浏览器的 5 个实例(但是,这可能只与 gui 打开 I猜测)。
很想知道这是否真的 运行 并行,或者我是否也需要使用 CPU 中的核心(如果可以做到?)
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)
如果您在 Linux 上 运行,您可以使用 top
shell 命令查看 运行 进程。打开时,如果您按 Shift-H
,它将显示线程。在观看 top
的同时 运行 程序,您应该会在一个父线程下看到多个 python 线程 运行。如果是这样,它正在工作。