Я написал простой скрипт, использующий Multiprocessing для извлечения соответствующих записей из нескольких баз данных, каждая из которых содержит различную информацию для одной и той же записи.Скрипт прекрасно работает на моей IDE и cmd, но всякий раз, когда я пытался скомпилировать его с помощью PyInstaller, я получал мгновенный черный экран, сопровождаемый звуком множества сообщений об ошибках.
Это основано на Python36, включает psycopg2, fiona и shapely, поскольку генерируемые файлы являются шейп-файлами.Но я скомпилировал другие сценарии с участием этих модулей и раньше, и они отлично работают.
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 )
Я предполагаю, что мне нужно ограничитьиспользование процессора в сценарии где-то, но на самом деле это мой первый раз, когда я пробовал модуль Multiprocessing, поэтому я не знаю как.