首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl真的很慢

Perl真的很慢
EN

Stack Overflow用户
提问于 2014-06-27 06:42:45
回答 1查看 772关注 0票数 1

我正在使用perl Net:SSH2 2库来执行SFTP。它工作得很好,但速度非常慢。它开始比链接速度慢7倍(这是我能处理的),但是当它传输了2MB的数据之后,它就下降到了1000倍。下面是我代码的简化版本。我使用这个Linux命令创建了一个10M的随机数据dd if=/dev/urandom of=10M.dat bs=1M count=10文件。对于任何想要运行代码的人,请输入服务器、用户、密码等的详细信息。

代码语言:javascript
复制
#!/usr/bin/perl

use strict;
use warnings;
use Fcntl ('O_WRONLY', 'O_CREAT');
use Net::SSH2;
use Time::HiRes qw(gettimeofday);

my $server = 'myserver';
my $username = 'myusername';
my $password = 'mypassword';
my $remoteFile = 'delme.dat';
my $localFile = '10M.dat';

my $ssh = Net::SSH2->new();
$ssh->connect($server) or die('Failed to connect to remote server for sftp');
$ssh->auth_password($username, $password);
$ssh->auth_ok() or die('Invalid username or password');
my $sftp = $ssh->sftp() or die('Ahhh!!');
open(my $localHandle, '<', $localFile) or die($!);
my $remoteHandle = $sftp->open($remoteFile, O_WRONLY | O_CREAT) or die($sftp->error());
my $tran = 0;
my $t = gettimeofday();
while(my $line = <$localHandle>)
{
  print $remoteHandle $line;
  $tran += length($line);
  my $newTime = gettimeofday();
  if($newTime - $t > 1)
  {
    print 'Speed is ' . ($tran / ($newTime - $t)) . "B/sec\n";
    $t = $newTime;
    $tran = 0;
  }
}
close($remoteHandle);
close($localHandle);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-28 07:57:02

Net::SSH2/libssh2中对SFTP的支持是次优的。

改用Net::SFTP::Foreign (如果您在Windows上使用Net::SSH2 backend Net::SFTP::Foreign::Backend::Net_SSH2 )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24445520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档