Как я могу создать приложение tkinter, которое использует многопроцессорный пул / процесс? И чтобы tkinter не зависал во время работы процессов.
Я хочу создать веб-скребок, используя Python Selenium, мультипроцессорный пул / процесс и tkinter как GUI. Ниже я оставляю пример кода для приложения и код для разбора. Как можно совместить, чтобы GUI не зависало?
class App():
def root_app(self):
self.root = Tk()
self.root.geometry('900x600+100+50')
self.root.title('RP парсер')
self.root.resizable(False, False)
bc = "#5A94C4"
self.root.configure(background = bc)
self.root.protocol('WM_DELETE_WINDOW', self.window_deleted)
start_label = Label(self.root, text='Начало:', width=6, height=2, bg= bc , fg='white', font='Arial 16')
start_label.place(x=60, y=25)
self.start_row = Entry(self.root, bd=1, width=6, font='Arial 12')
self.start_row.place(x=220, y=40)
end_label = Label(self.root, text='Конец:', width=6, height=2, bg= bc , fg='white', font='Arial 16')
end_label.place(x=54, y=60)
self.end_row = Entry(self.root, bd=1, width=6, font='Arial 12')
self.end_row.place(x=220, y=75)
proc_label = Label(self.root, text='Кол-во потоков:', width=12, height=1, bg= bc , fg='white', font='Arial 16')
proc_label.place(x=60, y=105)
self.proc_input = Entry(self.root, bd=1, width=6, font='Arial 12')
self.proc_input.place(x=220, y=110)
self.site_button = Button(self.root, text='Начать парсинг', relief="flat", font='Arial 13', bg='#2d4f78', fg='white', width=23, height=1, command=self.question)
self.site_button.place(x=60, y=150)
self.result_label = Label(self.root, text='Результаты:', width=12, height=1, bg="#3E729E" , fg='white', font='Arial 16')
self.result_label.place(x=350, y=10)
self.result_text=Text(self.root,height=23,width=48,font='Arial 14',wrap=WORD)
self.result_text.place(x=350, y=40)
self.clear_button = Button(self.root, text='Очистить лог', font='Arial 13', relief="flat", bg='#2d4f78', fg='white', width=28, height=1) # command=self.clear_text)
self.clear_button.place(x=350, y=550)
export_button = Button(self.root, text='Экспорт в Эксель', font='Arial 13', relief="flat", bg='#2d4f78', fg='white', width=30, height=1) #command=self.write_table)
export_button.place(x=610, y=550)
self.scrollbar = Scrollbar(self.root)
self.scrollbar.pack(side='right', fill='y')
self.scrollbar['command'] = self.result_text.yview
self.result_text['yscrollcommand'] = self.scrollbar.set
self.root.mainloop()
def question(self):
f = open('date.txt', 'w')
f.close()
answer = mb.askyesno(title="Continue", message='Continue?')
if answer == True:
start_scraping()
А:
def start_scraping():
options = webdriver.ChromeOptions()
options.add_argument('log-level=3')
options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
source = driver.page_source