У меня есть проект, в котором я должен тщательно очистить js зависимый веб-сайт. Там вы можете найти таблицу, похожую на структуру, в которой, если вы щелкнете по каждому элементу, он перейдет к выделенному макету, где отображаются данные, которые я могу обработать. Каждый элемент имеет срок службы часов, после которого элемент исчезает. Между тем, данные динамически обновляются. Эта сеть своеобразна, так как в основной таблице вы не можете найти прямую ссылку на каждый элемент (или, по крайней мере, традиционным способом просмотра html, возможно, с помощью обратного инжиниринга), так что единственный путь к go это открытие каталога для каждого элемента, go к таблице и затем щелчок по нужному элементу. Вот мой код
def Behaver(name_of_element):
status,driver=InitiateDriver()
if status!='Success':return 'Error'
Gotomaingrid() #After opening the driver, this brings it to the main table
Searchelementandclickonit() #Clicks on element and wait for it to be loaded
while True:
DoSomeScraping(driver)
st=Checkifexists(driver) #If the element is no longer active, ends the function
if st=='End':
try:driver.quit()
except:pass
return
import multiprocessing
status,driver=InitiateDriver()
if status!='Success':return 'Error'
Gotomaingrid()
table_elements=Scrapemaingrid(driver)
elem_process=dict()
for e in table_elements:
p=multiprocessing.Process(target=Behaver,args=(e,))
p.start()
elem_process[e]=p
for i in list(elem_process.keys()):
p=elem_process[i]
p.join()
Более или менее я открываю драйвер и go к таблице. Там я получаю название каждого элемента в таблице. После этого я запускаю мультипроцесс, где каждый процесс принадлежит элементу. Функция открывает драйвер, идет к таблице, ищет элемент, щелкает по нему и ждет, пока драйвер загрузит его, а затем очищает его для изменений в драйвере (так как сеть загружает их динамически). Когда элемент больше не активен, он закрывает драйвер и завершает процесс.
Проблемы
Я установил несколько отпечатков в функции Behaver, чтобы проверить состояние каждого процесса , Я не вижу печати ни в spyder, ни в консоли, которая открывается с каждым процессом. Я запускаю код во второй раз, и он открыл так много драйверов, что компьютер вышел из строя и должен был быть перезапущен
Возможно, я - нуб с многопроцессорностью (хотя у меня есть бот с многопоточностью, и он работает) но я не понимаю, что делается неправильно. Должен ли я порождать процессы медленнее, чтобы P C не обрабатывал sh? Почему там ничего не напечатано? Я попробовал функцию вести себя вне процесса, и она работала отлично, в то время как с многопроцессорностью все проблемы.
Спасибо!