编译后的Python Muiltiprocess无错误退出

2024-09-30 01:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我查看了一些老问题,试图找出是否有人遇到过这种情况,但没有找到任何相关的问题,因此我的问题是:

在使用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(),这样我就可以编译这个程序了。关于它为什么在第一次迭代后退出,有什么想法吗

我的执行情况的图像:

Execution Screenshot

请注意,“现在开始”是一个跟踪,一旦我弄清楚为什么它不再执行,它就会被删除。每条消息都来自一个正在启动的进程。此外,Untitled0.py是运行编译版本的程序,FireDetection.py是未编译版本

提前感谢您的帮助


Tags: importoutputdatatimeloggingasstartfire

热门问题