异步的ftp客户机/服务器
aioftp的Python项目详细描述
异步的ftp客户机/服务器(http://aioftp.readthedocs.org)
功能
- 很简单。
- 可扩展。
- 通过twunnel3代理。
目标
- 最小可用磁芯。
- 不要使用不推荐使用或重写的命令和功能(如果可能)。
- 非常高级的API。
客户端使用以下命令:user、pass、acct、pwd、cwd、cdup、mkd、rmd、mlsd, mlst、rnfr、rnto、dele、stor、appe、retr、type、pasv、abor、quit、rest、list (作为回退)
服务器支持以下命令:user、pass、quit、pwd、cwd、cdup、mkd、rmd、mlsd, 列表(但不建议使用,因为它没有标准格式) mlst,rnfr,rnto,dele,stor,retr,type(“i”和“a”),pasv,abor,appe,rest
这个子集足以完成99%的任务,但是如果你需要什么,那么 可以方便地扩展当前的命令集。
服务器基准
与pyftpdlib和 检查了它的ftpbench脚本。
AIOFTP 0.8.0
STOR (client -> server) 284.95 MB/sec RETR (server -> client) 408.44 MB/sec 200 concurrent clients (connect, login) 0.18 secs STOR (1 file with 200 idle clients) 287.52 MB/sec RETR (1 file with 200 idle clients) 382.05 MB/sec 200 concurrent clients (RETR 10.0M file) 13.33 secs 200 concurrent clients (STOR 10.0M file) 12.56 secs 200 concurrent clients (QUIT) 0.03 secs
Pyftpdlib 1.5.2
STOR (client -> server) 1235.56 MB/sec RETR (server -> client) 3960.21 MB/sec 200 concurrent clients (connect, login) 0.06 secs STOR (1 file with 200 idle clients) 1208.58 MB/sec RETR (1 file with 200 idle clients) 3496.03 MB/sec 200 concurrent clients (RETR 10.0M file) 0.55 secs 200 concurrent clients (STOR 10.0M file) 1.46 secs 200 concurrent clients (QUIT) 0.02 secs
依赖关系
- Python3.5.3+
许可证
aioftp是在apache 2许可下提供的。
库安装
pip install aioftp
开始
客户示例
importasyncioimportaioftpasyncdefget_mp3(host,port,login,password):asyncwithaioftp.ClientSession(host,port,login,password)asclient:forpath,infoin(awaitclient.list(recursive=True)):ifinfo["type"]=="file"andpath.suffix==".mp3":awaitclient.download(path)loop=asyncio.get_event_loop()tasks=(get_mp3("server1.com",21,"login","password")),get_mp3("server2.com",21,"login","password")),get_mp3("server3.com",21,"login","password")),)loop.run_until_complete(asyncio.wait(tasks))loop.close()
服务器示例
importasyncioimportaioftploop=asyncio.get_event_loop()server=aioftp.Server()loop.run_until_complete(server.start(None,8021))try:loop.run_forever()exceptKeyboardInterrupt:loop.run_until_complete(server.close())loop.close()
或者只使用简单的服务器
python -m aioftp --help