Задать вопрос
@shadrin_ss
Junior

Проблема с процессами multiprocessing, что делать?

class First(Thread):
    def __init__(self, Links, Potok, numbers):
        Thread.__init__(self)
        self.Links = Links
        self.Potok = Potok
        self.numbers = numbers

    def run(self):
        LinksMP = self.MainPage(self.Links)
        Links = LinksMP
        proxy = self.ProxyList()

        procs = []
        name = codecs.open('name.txt', 'r', "utf_8_sig")
        name = name.read()
        name = name.split('\n')
        for index, number in enumerate(self.numbers):

            proc = Process(target=self.Multiproc, args=(Links, name, proxy,))
            procs.append(proc)
            proc.start()
        
        for proc in procs:
            proc.join()

    def ProxyList(self):
        #Тут парсит прокси убрал место занимает
        return proxy

    def MainPage(self, Links):
        #Парсит список ссылок
        return Links

    def Multiproc(self, Links, name, proxy):
        while True:
            global ValCicle
            if len(proxy) == 0:
                proxy = self.ProxyList()

            Linkes = 0
            for line in Links:
                Linkes += 1

            proxies = 0
            for line in proxy:
                proxies += 1

            names = 0
            for line in name:
                names += 1

            proxys = random.randrange(0, proxies)
            names = random.randrange(0, names)
            Linkss = random.randrange(0, Linkes)

            TT = random.randrange(25, 60)
            chrome_options = Options()  

            #chrome_options.add_argument("--headless") 
            chrome_options.add_argument("user-agent="+ name[names]) 
            chrome_options.add_argument('--proxy-server=' + proxy[proxys])
            driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options)

            try:
                
                driver.get(Links[Linkss])
                time.sleep(5)
                driver.get(Links[Linkss])
                time.sleep(5)
                driver.get(Links[Linkss])
                time.sleep(TT)
                Down = driver.find_element_by_xpath('//div[@class="zen-comments"]').location_once_scrolled_into_view
                time.sleep(TT)
                ValCicle += 1
                VAL.configure(text=ValCicle) 
                driver.close()

            except:
                del proxy[proxys]
                driver.close()
                pass

Это сам код, я его немного подкоротал что бы проще было
Traceback (most recent call last):
  File "C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "GUI.py", line 40, in run
    proc.start()
  File "C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\process.py", line 121, in start
    self._popen = self._Popen(self)
  File "C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\context.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\context.py", line 326, in _Popen
    return Popen(process_obj)
  File "C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\popen_spawn_win32.py", line 93, in __init__
    reduction.dump(process_obj, to_child)
  File "C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
TypeError: cannot pickle '_thread.lock' object
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\spawn.py", line 107, in spawn_main
    new_handle = reduction.duplicate(pipe_handle,
  File "C:\Users\Сергей\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\reduction.py", line 79, in duplicate
    return _winapi.DuplicateHandle(
OSError: [WinError 6] Неверный дескриптор


Вопрос в том что нужно поставить блокировки я не понимаю что это такое читая доку как не про то все, дайте совет.
Если убрать из Class то все работает в штатном режиме, никаких ошибок не выдает
  • Вопрос задан
  • 736 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@antonksa
Перечитайте pep8. Глазам больно читать
self.Links = Links
self.Potok = Potok
driver.get(Links[Linkss])


Еще есть книжки всякие, евангелисты наши, Григорий Петров например, снимали видео "как именовать переменные, чтобы в тебя не бросали помидорами".

И вообще, кодеры на венде должны страдать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы