这是一个示例python脚本.如何从命令行多次运行此脚本,以便每次都不调用导入行? import语句加载时间太长.
import arcpy
val = arcpy.GetCellValue_management("D:\dem-merged\lidar_wsg84", "-95.090174910630012 29.973962146120652", "")
print str(val)
解决方法:
如果您严格要求“从其他程序调用此脚本.通过在命令行上发出’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()
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()
标签:python,import,command-line