Windows任务调度器执行的Python脚本中的多处理
我有一个使用多处理的Python脚本,我需要Windows任务调度器在每天早上6:45执行。它使用多处理的原因是,如果脚本暂停并且在一小时后仍未完成,则进程将终止 该脚本在手动运行时运行得非常好,但在由任务调度器运行时,它会跳过我试图使用多处理调用的函数中的所有代码。下面是伪代码Windows任务调度器执行的Python脚本中的多处理,python,multiprocessing,scheduled-tasks,windows-task-scheduler,Python,Multiprocessing,Scheduled Tasks,Windows Task Scheduler,我有一个使用多处理的Python脚本,我需要Windows任务调度器在每天早上6:45执行。它使用多处理的原因是,如果脚本暂停并且在一小时后仍未完成,则进程将终止 该脚本在手动运行时运行得非常好,但在由任务调度器运行时,它会跳过我试图使用多处理调用的函数中的所有代码。下面是伪代码 import arcpy, multiprocessing set variables def executeThisFunction(): do work if __name__ == '__main_
import arcpy, multiprocessing
set variables
def executeThisFunction():
do work
if __name__ == '__main__':
p = multiprocessing.Process(target=executeThisFunction)
p.start()
#Wait for 3600 seconds (1 hour) or until process finishes
p.join(3600)
#If thread is still active after 3600 seconds
if p.is_alive():
p.terminate()
很明显,当通过Windows任务调度器运行时,我的函数会被跳过,但当通过命令提示符或双击.py文件运行时,一切都会按预期运行。如何解决这个问题,以便在从Windows任务调度器调用时,它可以运行函数中的所有内容?您是否尝试过使用“main”-guard运行一个非常简单的脚本,但不使用任务调度器进行多处理?这行得通吗?我不知道它是否能在Windows上运行,但一个旧的Unix“诀窍”是获取“Windows任务调度器”的PPID(父进程id)和PID(进程id),看看它们是否相同-然后你就会知道你在该调度器下运行。因此我进一步回顾了脚本,该脚本确实在“主”中运行代码-guard,但无法通过p=multiprocessing.Process(target=executeThisFunction)调用my函数;p、 开始()。我将更新我的问题以澄清这一点。双击.py文件或通过命令提示符手动运行脚本时,executeThisFunction()可以正常工作。是否必须在Windows中执行
freeze\u support()
操作?也许您没有告诉任务调度器正确的Python解释器,而命令提示符确实知道正确的解释器。