python-3.x - 运行时使用多处理崩溃的编译脚本
问题描述
我使用 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 - 如何在 FTP 服务器上获取文件以特定字符开头的文件
- python - Tkcalendar 配置 DateEntry 小部件
- laravel - Laravel mix css因为第二个js而被清空
- typescript - “ApolloServer”类型的参数不可分配给“ApolloServerBase”类型的参数
- android - 如何解决gradle错误?org.gradle.api.tasks.TaskExecutionException
- spring - 使用 Spring Boot 连接到 MongoDB 和 Postgres
- push-notification - 跟踪打开推送通知的用户的 FCM 令牌
- cypress - Cypress.io 可以测试 chrome 扩展吗?
- movesense - 同步 movesense 采样率
- php - 如何在yii2中使用ManagerInterface的update()方法?