Python EEL 和多处理?

Python EEL and Multiprocessing?

当执行使用多处理的外部 python 脚本时,我目前面临 eel 和多处理打开多个 eel windows 的问题。

文件夹结构

Project[folder]
           |
        start.py
           |_______web[folder]
                          |_______partials[folder]
                                              |
                                           partial.py

从 start.py(启动我的应用程序的脚本)我导入 partial.py 因为我在应用程序的一部分中使用它的功能并且为了速度需要使用多处理。

代码片段

START.PY (putting a snippet as its way to long)

import eel
#import ... other imports(NO multiprocessing here)
sys.path.append(os.getcwd() + "/web/partials/")
import partials

#... several non relevant @eel.exposed functions are here...

APP ={#...dict with all the keys seen below...}

if __name__ == "__main__":
    try:
        # Start the application and pass all initial params below from APP dict
        eel.start(APP["start_html"], host=APP["host"], size=APP["size"], mode=APP["mode"], port=APP["port"])
    except (SystemExit, MemoryError, KeyboardInterrupt):
        # Handle bottle errors, in all cases call a function close of all remaining windows
        close_handler()
...

PARTIAL.PY

import eel
import os
import re
import socket
import ntc_templates
from mac_vendor_lookup import MacLookup, BaseMacLookup
import netmiko
from netmiko import Netmiko, NetMikoAuthenticationException, NetMikoTimeoutException
import concurrent.futures


def device_details_builder_mp():
    #... code that will run with multiprocessing from every entry in device_data below...


@eel.expose
def device_details_search(site, user, password, device_data):
    # Init list that will hold all the final data
    final_device_details = []

    with concurrent.futures.ProcessPoolExecutor() as executor_detail:
        results_details = [executor_detail.submit(device_details_builder_mp, device, site, user, password) for device in device_data]

        for result_detail in concurrent.futures.as_completed(results_details):
            final_device_details.append(result_detail.result())

问题

所以我认为我的问题是我将 partial.py 导入 start.py 的方式,如果我 运行 start.py 并使用该应用程序并触发使用多处理的功能从 java-script 端调用它就可以了。

问题发生在我打包应用程序并从 .exe 执行它时,当我使用使用多处理的功能时它不起作用并且它打开多个 eel windows,正在读取多处理重新导入一切又来了,但我无法完全弄清楚,我也看到了这个:https://github.com/samuelhwilliams/Eel/issues/224

希望有人可以帮助我如何更好地将 partial.py 导入 start.py,这样就不会导致多处理问题。

谢谢

桌面

那时候单行就可以了。

if name == "main": 中添加了 multiprocessing.freeze_support(),打包后,多处理工作正常。

我没找对地方,这不是鳗鱼问题而是 PyInstaller 问题

https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing#additional-code-for-pyinstaller--33-and-windows