Я просмотрел несколько старых вопросов, пытаясь выяснить, сталкивался ли кто-то с этим, но не нашел ни одного подходящего, поэтому у меня такой вопрос:
У меня есть код, который работает нормально перед использованием Cython для его компиляции, но после использования Cython он выходит между первым процессом и вторым.
Мой код выглядит так:
import dummyC as dummy
import numpy as np
import math
import logging
import time
import concurrent.futures as cf
from multiprocessing import freeze_support
start=time.time()
format = "%(asctime)s: %(message)s"
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
logging.info("Here we go!")
#path1="Y:/data/remotesensing/satellite/VIIRS/L1B/Pilot Areas/Fire/Observation/VNP02IMG.A2012164.1742.001.2017287025318.nc"
#path2="Y:/data/remotesensing/satellite/VIIRS/L1B/Pilot Areas/Fire/Geolocation/VNP03IMG.A2012164.1742.001.2017287005326.nc"
path1= "Y:/data/remotesensing/satellite/VIIRS/L1B/Pilot Areas/Fire/Observation/VNP02IMG.A2012152.1000.001.2017287002855.nc"
path2= "Y:/data/remotesensing/satellite/VIIRS/L1B/Pilot Areas/Fire/Geolocation/VNP03IMG.A2012152.1000.001.2017286230211.nc"
fd = dummy.fireData(path1,path2)
def thread_me(arr):
#The Algorithm here is proprietary, but also not the issue as it works pre-Cython
x=1 #Dummy code that produces the same issue
def start():
if __name__ == '__main__':
freeze_support()
arg=[[0,lines//4,0,pix//4],[0,lines//4,pix//4,pix//2],[0,lines//4,pix//2,(pix//4+pix//2)],[0,lines//4,(pix//4+pix//2),pix],
[lines//4,lines//2,0,pix//4],[lines//4,lines//2,pix//4,pix//2],[lines//4,lines//2,pix//2,(pix//4+pix//2)],[lines//4,lines//2,(pix//4+pix//2),pix],
[lines//2,(lines//2+lines//4),0,pix//4],[lines//2,(lines//2+lines//4),pix//4,pix//2],[lines//2,(lines//2+lines//4),pix//2,(pix//4+pix//2)],[lines//2,(lines//2+lines//4),(pix//4+pix//2),pix],
[(lines//2+lines//4),lines,0,pix//4],[(lines//2+lines//4),lines,pix//4,pix//2],[(lines//2+lines//4),lines,pix//2,(pix//4+pix//2)],[(lines//2+lines//4),lines,(pix//4+pix//2),pix]]
with cf.ProcessPoolExecutor(max_workers=4) as executor:
output = executor.map(thread_me, arg)
executor.shutdown(wait=True)
output = np.array(list(output))
numFire=0
file = open("NoFirePoints.txt","w")
for i in range(len(output)):
for j in range(len(output[i])):
numFire+=1
print(output[i][j][0],output[i][j][1],output[i][j][2])
tempStr = ' '.join([str(elem) for elem in output[i][j]])
tempStr = tempStr+'\n'
file.write(tempStr)
print(fd.firePoints,"Fire points")
logging.info("%d fires detected"%(numFire))
file.close()
print(str((time.time()-start)/60))
start()
А затем я вызываю start () из другой программы, так Я могу скомпилировать это. Любые идеи относительно того, почему он выходит после первой итерации?
Изображение того, как выглядит мое выполнение:
Обратите внимание, что «Здесь мы go» - это след, и он будет удален, как только я выясню, почему он не будет выполняться дальше. Каждое сообщение от запуска процесса. Кроме того, Untitled0.py - это программа, работающая на скомпилированной версии, а FireDetection.py - это некомпилированная версия
Заранее спасибо за помощь!