我目前正在编写一个Python脚本来处理大约10,000个输入文档.基于脚本的进度输出,我注意到前400个文档的处理速度非常快,然后脚本速度变慢,尽管输入文档的大小大致相同.
我假设这可能与大多数文档处理都是使用正则表达式完成的事实有关,我们在编译后不会将它们保存为正则表达式对象.相反,我会在需要时重新编译正则表达式.
由于我的脚本有大约10个不同的函数,所有函数都使用了大约10 - 20个不同的正则表达式模式,我想知道在Python中有什么更有效的方法可以避免一遍又一遍地重新编译正则表达式模式(在Perl中我可以简单地包括修饰语//o).
我的假设是,如果我将正则表达式对象存储在各个函数中使用
pattern = re.compile()
Run Code Online (Sandbox Code Playgroud)
在下次迭代函数的下一次调用之前,不会保留生成的正则表达式对象(每个函数被调用但每个文档一次).
创建一个预编译正则表达式的全局列表似乎是一个没有吸引力的选项,因为我需要将代码列表存储在我的代码中的不同位置,而不是它们实际使用的位置.
关于如何整齐有效地处理这个问题的任何建议?
我刚刚开始使用Paramiko连接到另一台主机.我可以通过其本地网络中的内部IP地址访问此主机,这样可以正常工作(无论是在Python中还是ssh在控制台中).
但是,当我尝试通过其外部IP地址访问主机时,通过Paramiko的访问ssh在控制台仍然有效时失败.这里唯一的区别是,我使用机器的外部IP地址而不是主机的内部IP地址.
有人可以帮忙吗?可能是Paramiko与我在路由器上配置的端口转发有什么冲突吗?
到目前为止,这是我的代码:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
target_host = 'external.IP'
# target_host = 'internal.IP'
# Internal access port for ssh transfer.
# target_port = 22
# External access port for ssh transfer.
target_port = ABCD
pwd = 'my.password'
un = 'my.username'
ssh.connect( hostname = target_host , username = un, password = pwd )
stdin, stdout, stderr = ssh.exec_command('ls -1 .')
print "STDOUT:\n%s\n\nSTDERR:\n%s\n" %( stdout.read(), stderr.read() )
Run Code Online (Sandbox Code Playgroud)
添加:
收到的完整错误消息是:
回溯(最近一次调用最后一次):文件"./test.py",第25行,在ssh.connect中(hostname = target_host,username = un,password …