Skip to main content
 首页 » 编程设计

python之线程或多处理

2025年05月04日9jackei

我有一些代码正在尝试加速。我的目标是下载并保存大约一百万个文件。我正在使用请求库来访问内容。我比以往任何时候都更加困惑。大多数 Q/A 建议正确的方法是在任务受 I/O 限制时使用线程模块,因为我正在连接到服务器,等待响应然后将响应写入磁盘,我的任务是 I/O绑定(bind)。

但后来我读到这样的东西

多个线程可以存在于一个进程中。属于同一个进程的线程共享同一个内存区域(可以读取和写入完全相同的变量,并且可以相互干扰)。

我的代码是这样的——在线程化之前

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) 

对我来说,使用任何一个都是跳入深端。因此,如果我对此进行多线程处理,我担心会发生一些意想不到的事情,例如某个文件的前半部分连接到另一个文件的后半部分。

这种类型的任务更适合多处理还是多线程。很明显,我不会知道两个不同的文件部分是否连接在一起,因为它们写入了同一个变量

请您参考如下方法:

两者都可以,但多处理会更安全,而且可能更容易实现。请记住,特别是对于 Python,Global Interpreter Lock意味着多线程不会从多核中获得太多好处,而多处理则不是问题。