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

Sha*_*nak 3 python import command-line

这是一个示例python脚本.如何从命令行多次运行此脚本,以便每次都不调用导入行?import语句加载时间太长.

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

Ale*_*kin 6

如果您严格要求"从其他程序调用此脚本.通过在命令行上发出'python script.py'",则此问题无法解决.如果你只想做一次"重导入",你必须只启动一次python脚本.考虑启动一个守护进程,它将启动一次,然后处理来自其他程序的调用.这样,所有初始化只需要进行一次,接下来的调用将很快.如果你将你的python代码分成两部分(守护进程的第一部分,守护进程客户端的第二部分),你将能够从另一个程序调用'python client.py',但实际的计算将由守护进程执行,这是开始只有一次.

例如:

daemon.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()
Run Code Online (Sandbox Code Playgroud)

client.py

import socket
import sys


def main():
    sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
    sock.settimeout(1)
    try:
        sock.sendto('', ('127.0.0.1', 6666))
        reply, _ = sock.recvfrom(4096)
        print reply
    except socket.timeout:
        sys.exit(1)
    finally:
        sock.close()


if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)