我有一些我正在尝试加速的代码。我的目标是下载并保存大约一百万个文件。我正在使用请求库来访问内容。我比以往任何时候都更加困惑。大多数 Q/A 建议正确的方法是在任务是 I/O 绑定时使用线程模块,并且由于我正在连接到服务器,等待响应然后将响应写入磁盘我的任务是 I/哦,绑定。
但后来我读到了这样的东西
多个线程可以存在于单个进程中。属于同一进程的线程共享相同的内存区域(可以读取和写入相同的变量,并且可以相互干扰)。
我的代码是这样的 - 在线程之前
def create_list(some_ftp_site):
# do some stuff to compare the list to
# the last list and return the difference in the two
return list_to_pull
def download_and save_the_file(some_url):
thestring = requests.get(some_url).content
file_ref = open(something)
fileref.write(the_string)
fileref.close()
if __name__ == '__main__'
files_to_get = create_list(some_ftp_site)
if len(files_to_get) != 0:
for file_to_get in files_to_get:
download_and_save(file_to_get)
对我来说,使用其中任何一个都是跳入深渊。因此,如果我对此进行多线程处理,恐怕会发生一些意想不到的事情,例如某个文件的前半部分连接到另一个文件的后半部分。
这种类型的任务是否更适合多处理或多线程。显然,我不知道两个不同的文件部分是否连接在一起,因为它们写入同一个变量