【发布时间】:2020-10-15 16:38:37
【问题描述】:
我正在阅读使用 selenium 进行多处理的文章,以了解它相对于使用 selenium 进行多线程处理的优势。
我了解计算机有内核,例如我的有 4 个,并且计算机有逻辑核心,例如我的也有4个。
我想了解的是,当我使用多处理时,它确实在一个核心上完成,如果是,是哪一个?就像我的计算机或其他内核使用的主内核一样。
是否也可以选择一个核心上需要多少个进程,是否有限制。
如果不清楚,我的问题:
-
多处理是否全部发生在一个内核上
-
你能选择一个核心上有多少个进程
-
是否应该限制核心上的进程数
- 如果应该有限制,解决此问题的最佳方法是什么
这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
import multiprocessing
class go():
def __init__(self):
self.run()
def run(self):
options = webdriver.ChromeOptions()
options.add_argument('--headless', )
self.browser = webdriver.Chrome('chromedriver.exe',options=options)
self.browser.get('https://www.wikipedia.org/')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.ID, "searchInput"))).send_keys('Python',Keys.ENTER)
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Computing"))).click()
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "People"))).click()
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Roller coasters"))).click()
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Vehicles"))).click()
time.sleep(3)
print('Moved To Next Section ')
WebDriverWait(self.browser, 10).until(
EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Weaponry"))).click()
time.sleep(100)
if __name__ == "__main__":
for count in range(10):
multiprocessing.Process(target=go).start()
【问题讨论】:
-
没有主核心,所有核心都是平等的。您的代码产生进程,操作系统决定哪个进程由哪个内核处理。 (也有可能会切换内核)多个进程可以在一个内核上运行,但这并不是真正的多处理,因为它会争夺 CPU 资源。
-
那么,你是说多处理会自动使用某种智能来为核心指定进程
-
@coderoftheday 不,
multiprocessing只是产生多个进程。决定使用哪些内核的是操作系统 -
我明白了,那么使用线程做多进程来提高性能会不会很聪明
-
多处理和多线程是两个不同的东西。除非您想做基于 IO 的操作(例如 HTTP 请求、从队列/DB 读取),否则多线程对您没有用处,因为 python 没有真正的多线程。 (你应该阅读关于 python 中的多线程,以及 GIL-Global Interperter Lock)
标签: python selenium selenium-webdriver multiprocessing cpu-cores