繁体   English   中英

Python EEL 和多处理?

[英]Python EEL and Multiprocessing?

当执行使用多处理的外部 python 脚本时,我目前面临鳗鱼和多处理打开多个鳗鱼 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脚本端调用的多处理的功能,它就可以工作。

问题发生在我打包应用程序并从 an.exe 执行它时,当我使用使用多处理的功能时它不起作用并打开多个 eel windows,正在读取多处理重新导入所有内容,但我想不通很明显,我也看到了这个: https://github.com/samuelhwilliams/Eel/issues/224

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

谢谢

桌面

  • 操作系统:Windows 10 1809
  • 浏览器:勇敢
  • 版本:EEL 0.12.4

那个时候单行就可以了。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM