python向nas上写入数据很慢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python向nas上写入数据很慢相关的知识,希望对你有一定的参考价值。

如果Python向NAS(网络附加存储)上写入数据很慢,这可能是由于以下原因之一:

网络延迟:网络连接不稳定或延迟过高可能导致数据传输速度变慢。您可以尝试在不同时间段运行Python脚本以查看是否有网络拥塞。

NAS读写速度:某些NAS设备的读写速度可能比其他设备慢。请确认您的NAS设备的读写速度是否与您预期的一致。

文件大小:如果您的Python脚本正在处理大型文件,则可能需要一些时间来完成写入操作。尝试将数据拆分为较小的块,并在块之间进行适当的同步。

Python代码问题:您的Python代码本身可能会导致写入速度变慢。例如,如果您使用了大量的IO操作,这可能会导致性能下降。请优化代码以减少IO操作和内存占用。

磁盘读写缓存:NAS设备通常具有自己的磁盘读写缓存机制。如果缓存大小过小,则可能会导致写入速度变慢。尝试增加NAS设备的磁盘读写缓存大小来提高写入速度。

磁盘格式问题:某些NAS设备可能使用了不常见的磁盘格式,这可能会导致写入速度变慢。尝试将NAS设备的磁盘格式更改为更常见的格式,例如NTFS或FAT32。

如果您已经尝试了上述方法但仍然遇到写入速度变慢的问题,建议联系NAS设备制造商以获取更多支持。
参考技术A 这可能是由多个原因导致的,包括NAS硬件本身的性能低下、NAS网络的带宽和延迟高,以及python本身的传输速度较慢等原因。建议您查询NAS 硬件参数,检查NAS网络带宽,并尝试替换python中使用的传输算法。 参考技术B 可能是由于NAS系统的配置不当造成的,比如NAS上的存储容量不够大,或者是由于NAS上的硬件设备出现故障。此外,也有可能是因为Python与NAS之间传输数据时使用的协议出现问题,导致传输速度变慢。因此,要想解决这个问题,最好先检查一下NAS上的存储容量、硬件设备以及Python和NAS之间使用的协议是否有问题。 参考技术C Python向NAS上写入数据很慢可能有以下原因:

网络带宽限制:如果您的NAS和Python程序运行的计算机之间的网络带宽较低,数据传输速度就会变慢。

硬盘读写速度限制:如果您的NAS硬盘读写速度较慢,或者硬盘已经接近满负荷,写入数据的速度就会变慢。

Python程序的性能问题:如果您的Python程序写入数据的方式不够高效,或者存在其他性能问题,也会导致写入数据的速度变慢。

针对这些问题,您可以尝试以下解决方案:

检查网络带宽:可以使用网络测试工具检查NAS和Python程序运行的计算机之间的网络带宽,如果网络带宽较低,可以考虑升级网络设备或者使用其他网络传输方式。

检查NAS硬盘读写速度:可以使用硬盘测试工具检查NAS硬盘的读写速度,如果硬盘读写速度较慢,可以考虑升级硬盘或者使用其他存储设备。

优化Python程序:可以使用Python性能分析工具检查Python程序的性能问题,并进行优化。例如,可以使用多线程或者异步IO等方式提高写入数据的效率。

总之,Python向NAS上写入数据很慢可能有多种原因,需要根据具体情况进行分析和解决。
参考技术D 在 Python 中向 NAS(网络附加存储)设备写入数据过慢可能有以下原因:

1. 网络带宽限制:NAS 设备通常连接网络,并通过网络进行文件传输。如果网络的带宽是瓶颈,那么数据传输速度就会变慢。你可以使用一些工具测试本地网络和 NAS 设备之间的带宽,以确定是否存在此问题。

2. 数据写入方式:Python 中常用的写入方式有三种:`write`方法、`writelines`方法和 `print`方法。其中,`write`和`writelines`方法是直接将数据写入文件,而 `print` 方法需要将数据先缓存在内存中,再写入文件。因此,在写入大量数据时,最好使用 `write`方法或 `writelines`方法,以最大限度地减少数据在内存中的停留时间。

3. 文件大小限制:NAS 设备通常有一些文件系统上的限制,例如每个文件大小不能超过某个值,文件名长度也有限制。如果超过这些限制,数据写入速度就会变慢。

4. 硬件性能限制:NAS 设备的硬件性能(特别是 CPU 和内存)可能会影响数据传输速度。如果 NAS 设备的 CPU 或内存不够强大,可能最好升级设备或寻找其他解决方案。

5. 程序实现问题:如果你的代码实现方式有问题,也可能导致数据写入速度变慢。检查代码是否存在死循环、重复读写等问题,以及是否使用了适当的缓存和写入方法等。

综上所述,解决 Python 向 NAS 设备写入数据慢的问题,需要通过排除这些可能的原因,找到最适合的解决方案。

python连接数据库异步存储

当同步写入数据库时,可能会发生下载速度很快,但是写入速度很慢的情况,因此我们采用异步存储写入数据库.     

实现异步写入mysql数据库的思路:    

    1,将数据库的连接数据写入到settings文件中,供后面自定义的pipeline使用
    2,自定义pipeline,使用Twisted框架实现异步
    3,在settings中注册这个管道

在settings设置连接信息

 

1 MYSQL_HOST = 127.0.0.1
2 MYSQL_DBNAME = testdb
3 MYSQL_USER = root
4 MYSQL_PASSWD = 123456
5 MYSQL_CHARSET="UTF8"
6 
7 MYSQL_PORT = 3306

 

在pipeline自定义一个新的类来实现异步存储

from MySQLdb.cursors import DictCursor
from twisted.enterprise import adbapi
class MySQLAsynPipeline(object):

    def __init__(self,dbpool):
#定义连接池为对象函数 self.dbpool
=dbpool query = self.dbpool.runInteraction(self.create_table) #创建存储表 def create_table(self,cursor): sql = "create table if not exists test (id INT PRIMARY KEY auto_increment NOT NULL , title VARCHAR(50) NOT NULL,category_name VARCHAR (100),date_time VARCHAR (20) NOT NULL ,likes INT DEFAULT 0,content longtext ,comment INT DEFAULT 0,collect INT DEFAULT 0,detail_url VARCHAR (255) UNIQUE,src VARCHAR (255))" cursor.execute(sql) #自动调用的,只调用一次 #从settings.py中根据字段加载对应的文件 @classmethod def from_settings(cls, settings): #POOL池子,con:连接 #参数1:dbapiName 数据库接口名称 #参数2:*connargs *args #参数3:*connkw **kwargs
#将setting中连接数据库所需内容取出
config = dict( host=settings[MYSQL_HOST], db = settings[MYSQL_DBNAME], user = settings[MYSQL_USER], passwd =settings[MYSQL_PASSWD], charset = settings[MYSQL_CHARSET], port = settings[MYSQL_PORT], cursorclass = DictCursor, ) #通过Twisted框架提供的容器连接数据库 dbpool = adbapi.ConnectionPool( "MySQLdb", **config ) #cls把参数给__init__ return cls(dbpool) #roll back:回滚 #commit:提交 #事务:如果所有语句都执行正确,才真正执行,只要有一条数据出错,可以通过回滚撤销所有操作 #开启事务 # 尝试执行多条sql语句 #没问题 commit #有问题 roll back #关闭事务 def process_item(self, item, spider): #runInteraction:运行交互 query =self.dbpool.runInteraction(self.insert_sql,item) #当执行过程中出现错误,执行adderrback query.addErrback(self.insert_error, item, spider) return item def insert_error(self,failed): print ">>>>>>>>>>>",failed def insert_sql(self,cursor, item):
#执行具体的插入语句,不需要commit操作,Twisted会自动进行 sql
= "insert into test (title,category_name, date_time,likes,content, comment,collect, detail_url,src) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)" cursor.execute(sql, ( item[title], item[category_name], item[date_time], item[likes], item[content], item[comment], item[collect], item[detail_url], item[src][0])

在settings里注册:

ITEM_PIPELINES = {
    #Mysql异步写入
    "JobboleSpider.pipelines.MySQLAsynPipeline": 2,

}

完成异步存储,数据存往数据库的速度与下载的速度差不多快

 

以上是关于python向nas上写入数据很慢的主要内容,如果未能解决你的问题,请参考以下文章

SSD写入很慢是怎么回事

处理使用 docker 向 google big query 读取和写入数据的 python 脚本的自动身份验证

python脚本向influxdb写入数据

python如何向excel单元格写入数据

Python向excel中写入数据的方法 方法简单

python连接数据库异步存储