执行python代码,而不调用import语句

2024-10-01 17:31:10 发布

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

下面是一个示例python脚本。如何从命令行多次运行此脚本,以避免每次都调用导入行?import语句的加载时间太长。在

import arcpy
val = arcpy.GetCellValue_management("D:\dem-merged\lidar_wsg84", "-95.090174910630012 29.973962146120652", "")
print str(val)

Tags: 命令行import脚本示例时间val语句merged
3条回答

这几乎是不可能的。一旦离开解释器,被导入的模块就不再在内存中。这类似于要求Firefox将大型网页保存在内存中,因为缓存的读取速率太长。一旦Firefox(或Python)被关闭,RAM中的任何东西都将被关闭。在

您可以加快加载时间,但风险自负。通过跑步

python -O 

你可以让它走得快一点。你也可以再加一个“O”来让它运行得更快一点。然而,这可能会使一些程序出错,并且不总是有效的。在

你可以通过

^{pr2}$

这可能会让事情进展得更快。在

据我所知,这个模块只导入一次。所以如果你这么做了:

import a
import a

它只导入一次。因此,不必多次运行脚本,也许您可以更改它以一次性生成所有副本。在

如果您必须多次运行这个特定的脚本,我认为您无法避免导入,而且每次都需要导入它。在

如果您严格要求这个脚本“从另一个程序调用”,这个问题就没有解决方案。通过发出“python”脚本.py“在命令行上”。 如果只想执行一次“重导入”,那么只需启动一次python脚本。 考虑启动一个守护进程,它将启动一次,然后处理来自其他程序的调用。这样所有的初始化只需进行一次,下一次调用将很快。 如果将python代码分成两部分(第一部分用于守护进程,第二部分用于守护程序客户机),则可以调用'python客户端.py'来自另一个程序,但实际计算将由守护程序执行,只启动一次。在

例如:

守护程序.py

import socket
#import arcpy

def actual_work():
    #val = arcpy.GetCellValue_management("D:\dem-merged\lidar_wsg84", "-95.090174910630012 29.973962146120652", "")
    #return str(val)
    return 'dummy_reply'


def main():
    sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
    try:
        sock.bind( ('127.0.0.1', 6666) )

        while True:
            data, addr = sock.recvfrom( 4096 )
            reply = actual_work()
            sock.sendto(reply, addr)
    except KeyboardInterrupt:
        pass
    finally:
        sock.close()


if __name__ == '__main__':
    main()

客户端.py

^{pr2}$

相关问题 更多 >

    热门问题