首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个multiprocessing.Process访问pywebview.Window对象?

如何从另一个multiprocessing.Process访问pywebview.Window对象?
EN

Stack Overflow用户
提问于 2021-09-01 20:29:19
回答 1查看 240关注 0票数 0

我有一个控制flask应用程序接口的webview

webview将有一个启动flask server的按钮和一个停止服务器的按钮。这就是为什么我必须使用multiprocessing.ProcessFlask创建一个单独的进程。这样,我就无法再访问我的pywebview.Window了。我想使用pywebview.WindowFlask进程中使用pywebview.Window.evaluate_js()评估一些javascript (当然,它必须是我在为Flask打开一个新进程之前已经创建的同一个pywebview.Window )。有谁知道如何解决这个问题。我很感激!

一些示例代码:

代码语言:javascript
复制
from flask import Flask, request, jsonify
import os, sys, re, json, socket, sqlite3, base64, requests, webview
from flask_cors import CORS

class ServerFlaskApi:
    def __init__(self):
        self.app = Flask(__name__, root_path=Root_Dir)
        self.app.add_url_rule("/", view_func=self.Default)

    def Default(self):
        return "Welcome to the Python Http Server for your Application!", 200
    def PrintToWebViewConsole(self):
        #Trying to use pywebview.Window here, of course WebviewWindow is not defined!!!
        WebviewWindow.evaluate_js(js_script)
################
class WebviewApi:
    def __init__(self):
        self.server_thread = None
    def StartServer(self):
        self.server_thread = multiprocessing.Process(target=Run_Flask_Server, daemon=True)
        self.server_thread.start()
    def StopServer(self):
        self.server_thread.terminate()

def Run_Flask_Server():
    serverApi = ServerFlaskApi()
    CORS(serverApi.app)
    serverApi.app.run(host=Server_Host, port=Server_Port, debug=True, use_reloader=False)
################
if __name__ == "__main__":
    WebViewApi = WebviewApi()
    WebviewWindow = webview.create_window(title="Server Monitor", url="view/main-gui.html", js_api=WebViewApi, width=550, height=750, min_size=(550, 750), resizable=False, on_top=True, confirm_close=False)
    webview.start(debug=False)

我在Python上还是个新手,所以欢迎任何建议!

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 13:26:04

我想我必须使用Threading而不是Processing,因为Thread共享内存,而Process不共享内存。此外,对于任何想要停止Thread的人,这里有一个函数可以做到这一点,虽然不确定这是不是一个好方法,但它可以为我做这件事:

代码语言:javascript
复制
def Kill_Thread(thread):
    if not isinstance(thread, threading.Thread):
            raise TypeError("Must be set as threading.Thread type!!!")
    thread_id = thread.ident
    res = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, ctypes.py_object(SystemExit))
    if res > 1:
        ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, 0)
        print("Exception raise failure")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69020223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档