首页 > 解决方案 > 运行时使用多处理崩溃的编译脚本

问题描述

我使用 Multiprocessing 编写了一个简单的脚本来从多个数据库中获取相应的记录,每个数据库都包含同一记录的不同信息。该脚本在我的 IDE 和 cmd 上运行良好,但每当我尝试使用 PyInstaller 编译它时,我都会立即出现黑屏,然后是大量错误消息的声音。

这是基于 Python36 的,涉及 psycopg2、fiona 和 shapely,因为生成的文件是 shapefile。但是我之前编译了涉及这些模块的其他脚本并且它们工作正常。

import psycopg2
import fiona
from shapely.geometry import mapping
from shapely.wkt import loads
import re
import numpy
from multiprocessing import Process


def A(list):
    for file in list:
        query database A, generate shapefile for product A


def B(list):
    for file in list:
        query database B, generate shapefile for product B


def C(list):
    for file in list:
        query database C, generate shapefile for product C


if __name__ == '__main__':
    e = Process(target=A, args=(scopes,))
    m = Process(target=B, args=(scopes,))
    p = Process(target=C, args=(scopes,))
    e.start()
    m.start()
    p.start()
    e.join()
    print("\nProduct A is done")
    m.join()
    print("Product B is done")
    p.join()
    print("Product C is done")

编译过程中生成的规范是这样的:

# -*- mode: python -*-

block_cipher = None


a = Analysis(['Scope Process Monitor.py'],
             pathex=['C:\\Python36-32\\Lib\\site-packages\\osgeo', 'C:\\Users\\myname\\OneDrive - Company\\Scripts\\Scope Process Monitor'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='Scope Process Monitor',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

我猜我需要在某个地方限制脚本中 CPU 的使用,但这实际上是我第一次尝试 Multiprocessing 模块,所以我不知道如何。

标签: python-3.xpython-multiprocessing

解决方案


推荐阅读