Работает ли многопроцессорность на одном ядре

Я читаю о многопроцессорности с селеном, чтобы увидеть его преимущества перед многопоточностью с селеном.

Я понимаю, что у компьютеров есть ядра, например. у моего 4, и у компьютеров есть логические ядра, например. у моего тоже 4.

Что я пытаюсь понять, так это то, что когда я использую многопроцессорность, все это делается на одном ядре, и если да, то на каком? как в основном ядре, используемом моим компьютером или другими ядрами.

Также можно выбрать, сколько процессов вы хотите на ядре, и должен ли быть предел.

Мои вопросы, если не понятно:

  1. Происходит ли многопроцессорность на одном ядре?

  2. Можете ли вы выбрать, сколько процессов вы хотите на ядре

  3. Должен ли быть предел тому, сколько процессов у вас есть на ядре

    • If there should be a limit what is the best way to work this out

Вот мой код:

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()

person coderoftheday    schedule 15.10.2020    source источник
comment
Нет основного ядра, все ядра равны. Ваш код порождает процессы, а ОС решает, какой процесс каким ядром обрабатывается. (также возможно, что он будет переключать ядра). Несколько процессов могут работать на одном ядре, но тогда это не совсем многопроцессорная обработка, поскольку она будет соревноваться за ресурсы ЦП.   -  person Meny Issakov    schedule 15.10.2020
comment
Итак, вы говорите, что многопроцессорность автоматически использует какой-то интеллект для назначения процессов ядрам?   -  person coderoftheday    schedule 15.10.2020
comment
@coderoftheday нет, multiprocessing просто порождает несколько процессов. Операционная система решает, какие ядра использовать.   -  person juanpa.arrivillaga    schedule 15.10.2020
comment
Понятно, было бы разумно использовать потоки для выполнения нескольких мультипроцессов, чтобы повысить производительность.   -  person coderoftheday    schedule 15.10.2020
comment
Многопроцессорность и многопоточность — это две разные вещи. Если вы не хотите выполнять операции на основе ввода-вывода (например, HTTP-запросы, чтение из очередей/БД), то многопоточность вам бесполезна, поскольку в python нет настоящей многопоточности. (вы должны прочитать о многопоточности в python и о GIL-Global Interperter Lock)   -  person Meny Issakov    schedule 15.10.2020
comment
@coderoftheday Вы не используете потоки для создания нескольких процессов, потоки предназначены для многопоточности. В CPython многопоточность будет всегда ограничена одним потоком, работающим за раз, из-за глобальной блокировки интерпретатора, поэтому код, привязанный к процессору, скорее всего, не будет улучшен, но привязка к вводу-выводу может.   -  person juanpa.arrivillaga    schedule 15.10.2020
comment
спасибо, я проведу дополнительные исследования   -  person coderoftheday    schedule 15.10.2020


Ответы (1)


Происходит ли многопроцессорность на одном ядре?

No

Можете ли вы выбрать, сколько процессов вы хотите на ядре

No

Должен ли быть предел количества процессов, которые у вас есть на ядре Если должен быть предел, как лучше всего это решить

Это не то, что вы делаете из кода Python. O/S отвечает за это. Для пользователя практически нет ограничений на количество потоков или процессов.

И Мени Исаков прав, вы должны прочитать о многопроцессорности в питоне.

person sleepyhead    schedule 15.10.2020