为什么Colab在短短几秒钟内运行此代码(包含multiprocessing.Pool),而笔记本电脑却永远运行?

时间:2020-08-04 09:59:27

标签: python-3.x multithreading multiprocessing google-colaboratory

我有以下代码来检查链接的状态。如果链接状态良好,则其对应的Status将被1更新并打印ok。我在Google Colab here中运行此代码。

import pandas as pd

from multiprocessing import Pool

import requests

session = requests.Session()

headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0'}

# Define a dictionary containing links 

data = {'Link': ['https://www.collinsdictionary.com/dictionary/french-english/aimer',

                 'https://www.collinsdictionary.com/dictionary/english-french/graduate',

                 'https://www.collinsdictionary.com/dictionary/english-french/apple',

                 'https://www.collinsdictionary.com/dictionary/english-french/apricot'], 

                'Status': [0, 0, 0, 0]} 



# Generate datafrane df

df = pd.DataFrame(data, columns = ['Link', 'Status']) 



#Generate function to check status of a link

def check_status(i):

    r = session.get(df.at[i, 'Link'], headers = headers)

    if r.status_code == 200:

        df.at[i, 'Status'] = 1

        return 'ok'

    else:

        return 'not ok'



pool = Pool(5)

result = pool.map_async(check_status, list(df[df['Status'] == 0].index)[0:4])

pool.close()



print(result.get())  

print(df) 



 

Colab的结果是

['ok', 'ok', 'ok', 'ok']

                                                Link  Status

0  https://www.collinsdictionary.com/dictionary/f...       0

1  https://www.collinsdictionary.com/dictionary/e...       0

2  https://www.collinsdictionary.com/dictionary/e...       0

3  https://www.collinsdictionary.com/dictionary/e...       0

您能否解释一下为什么Colab在几秒钟内运行此代码,而我的笔记本电脑却永远运行?

0 个答案:

没有答案