Многопроцессорная обработка Python, работающая только на одном ядре с поддержкой сети - PullRequest
0 голосов
/ 20 февраля 2019

Я создаю программу для генерации URL-адреса .onion, а затем проверяю его, чтобы увидеть, существует ли он.Проблема в том, что я настроил его на использование многопроцессорной обработки, и он использует только одно ядро, даже когда запущено несколько процессов.

Мой код

import requests
import time
import sys
import threading
import random
import string
import multiprocessing

proxies = {
            'http': 'socks5h://127.0.0.1:9150',
            'https': 'socks5h://127.0.0.1:9150'
        }

try:
    print("Your hidden ip is: " + requests.get("https://api.ipify.org/?", proxies=proxies, timeout=10).text)
    print("Checks at intervals to check if the commection is still established (pings google.com)")
except Exception as  e:
    print("Make sure tor is running or check that a socks proxy is running at 127.0.0.1:9150!")
    sys.exit(0)

def checkSite(site):
    if random.randint(0, 100) == 5:
        site = "https://google.com"
    try:
        data = requests.get(site, proxies=proxies, timeout=10)
        if data.status_code == 200:
            print('Website exists {}'.format(site))
            sys.exit(0)
            print("hello")
        else:
            return
            #print('Website does not exist {}'.format(site))
    except Exception:
        #print('Website does not exist {}'.format(site))
        return

def genSite():
    site = ""
    x= string.ascii_lowercase + "234562"
    for i in range(0, 16):
            site = site + x[random.randint(0, len(x) - 1)]
    return ("http://" + site + ".onion")

def findSite():
    while True:
        checkSite(genSite())

if __name__ == "__main__":
    processes = []
    for _ in range(int(input("Enter number of processes: "))):
        p = multiprocessing.Process(target=findSite) # create a new Process
        processes.append(p)
        p.start()
    for process in processes:
        process.join()

Я пробовал это с запускомВместо этого используется факториальная функция, которая будет использовать все ядра, однако при запуске функции findSite она будет использовать только одно ядро.Я не знаю, погода ли это проблема с сетью и должны быть использованы потоки или если мой код неверен.Я также попытался присоединиться к процессам сразу после их запуска и поместить оператор соединения в разные места, однако это не сработало.

...