python 多线程写入文件
在python中,对文件的操作时很简洁的,一般是通过打开文件,获取文件对象,然后对文件对象进行写入。
这是file 的一些常用方法:
class file(object):
def close(self): # real signature unknown; restored from __doc__
pass
def fileno(self): # real signature unknown; restored from __doc__
return 0
def flush(self): # real signature unknown; restored from __doc__
pass
def isatty(self): # real signature unknown; restored from __doc__
return False
def next(self): # real signature unknown; restored from __doc__
pass
def read(self, size=None): # real signature unknown; restored from __doc__
pass
def readinto(self): # real signature unknown; restored from __doc__
pass
def readline(self, size=None): # real signature unknown; restored from __doc__
pass
def readlines(self, size=None): # real signature unknown; restored from __doc__
return []
def seek(self, offset, whence=None): # real signature unknown; restored from __doc__
pass
def tell(self): # real signature unknown; restored from __doc__
""" tell() -> current file position, an integer (may be a long integer). """
pass
def truncate(self, size=None): # real signature unknown; restored from __doc__
pass
def write(self, p_str): # real signature unknown; restored from __doc__
pass
def writelines(self, sequence_of_strings): # real signature unknown; restored from __doc__
pass
def xreadlines(self): # real signature unknown; restored from __doc__
pass
通常是通过write 直接一个挨着一个的写,如果有一天,突然想要多个线程去写一个文件,怎们办呢??
思路是这样的:
1.对于文件的大小要确定
2.并且对于每个线程的需要处理的内容大小进行划分
3.然后在各个线程里面将内容写入进去
4.需要注意的是对于每个线程,要给予一个文件对象,通常是在主线程中打开文件获得文件对象,然后复制这个文件对象的描述符,并用os.fdopen()获取这个文件对象,传递给各个线程使用!
另外一种方式:
如果对文件的大小,事先是不知道的,仅仅可以参考里面有多少行,具体的大小,不知道的时候怎们办呢。
解决方法可以是:按行进行分批,每个线程下载固定的行数,到不同的缓存文件中,然后对文件进行拼接获取完整文件!此时可以根据线程数量进行多倍效率的提高!
注意:在进行一些文件操作的时候,过多的打印一些输出到控制台会影响程序的效率,一定注意!