Не работает multiprocessing в python
Подскажите пожалуйста, что я делаю не так? Есть библиотека pywebview, которая позволяет корректно отображать локальный сайт и приложение написанное с графической оболочкой tkinter. Требуется, чтобы при нажатии на кнопку открывался сайт, но остальное приложении не блокировалось. Однако при запуске сайта всё приложение блокируется! Мне подсказали, что необходимо использовать подход с потоками, сначала я попробовал через библиотеку Thread, но pywebview выдал ошибку, что ему нужен основной поток, тогда я реализовал его работу в потоке через библиотеку Multiprocessing и всё работает, только приложение по-прежнему блокируется...
Код для демонстрации выглядит так:
import multiprocessing as mp
from tkinter import *
from tkinter import ttk
import webview
class Server():
def __init__(self):
self.top = Frame(root, highlightbackground='#707070',
highlightthickness=1)
self.bottom = Frame(root, background="white",
highlightbackground='#707070',
highlightthickness=1)
self.top.pack(side=TOP, fill=BOTH)
self.bottom.pack(side=BOTTOM, fill=BOTH, expand=True, pady=[2, 0])
self.btn_site = ttk.Button(root, text='Запустить',
compound='left',
command=self.run, cursor='hand2')
self.btn_site1 = ttk.Button(root, text='Проверка работы второй '
'кнопки',
compound='left',
command=self.run1, cursor='hand2')
self.text_title = ttk.Label(root, text='Запусти...',
font=('Times New Roman', 16, 'bold'),
justify="center", background="white")
self.btn_site.pack(in_=self.top, side=RIGHT)
self.btn_site1.pack(in_=self.top, side=RIGHT)
self.text_title.pack(in_=self.bottom, side=TOP, pady=275)
def run(self):
webview.create_window('Сервер',
'https://www.google.com/',
width=1288,
height=733, x=318, y=236,
on_top=False, zoomable=True,
text_select=True)
p = mp.Process(target=webview.start())
p.start() # запускаем процесс
def run1(self):
print('CHECK')
if __name__ == '__main__':
root = Tk()
server = Server()
root.mainloop()
Буду очень признателен, если подскажите где ошибаюсь. Вроде процесс верно определяю, так что ему нужно?
Ответы (1 шт):
пример:
import multiprocessing as mp
import webview
def web(name, url):
webview.create_window(name, url,
width=1288, height=733, x=318, y=236,
on_top=False, zoomable=True, text_select=True)
webview.start()
def run(name, url):
p = mp.Process(target=web, args=(name, url))
p.start()
if __name__ == '__main__':
run('multiprocessing 1', 'https://www.google.com/')
run('multiprocessing 2', 'https://www.yandex.ru/')
web("Main thread", "https://ru.stackoverflow.com/")