如何生成唯一的文件名
之前用python(urllib2+beautifulsoup)写了一个爬虫,爬取一些图片和相关的文本。一共12类图像,每一类使用一个线程下载。
我使用一个列表url_list保存已经下载过的图片的链接,后面在遇到链接的时候判断是否存在列表url_list中,如果存在就不再下载。我使用url_list的长度对图像和它对应的文本命名。然后写入文件,如果写入过程没有发生异常,那么就把图片的链接加入url_list中。过程大致如下:
1.根据url_list长度生成文件名
2.写入文件
3.将图片链接加入url_list
但是在多线程下有可能出现重复的文件名,比如类A完成了第一步进入第二步(进入第三步之前),此时,类B也进入第一步,那么A还没有将链接加入url_list,url_list的长度还没有发生变化,那么类B就生成了重复的文件名。
我的代码大致如下:
#根据列表生成文件名,url_list_rlock是锁
url_list_rlock.acquire()
text_file_name = str(len(image_url_list))+'.txt'
image_file_name = str(len(image_url_list))+'.jpg'
url_list_rlock.release()
#写入文件,省略
#下面把链接加入列表
url_list_rlock.acquire()
image_url_list.append(image_url)
url_list_rlock.release()
>>> import os
>>> os.path.isfile(r'no_file.py')
False