Не работает 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/")
→ Ссылка