使用多处理时杀死子流程

时间:2018-01-09 17:43:51

标签: python python-multiprocessing google-url-shortener

我需要使用Google Shortener API缩短多个网址。由于每个缩短过程不相互依赖,我决定在Python中使用多处理库。

raw_data是一个包含我的长网址的数据框。 Api_Key是一个包含来自多个Google帐户的api密钥的列表(因为我不想达到api使用限制一天)

这是底层代码。

import pandas as pd
import time
from multiprocessing import  Pool
import math
import requests

raw_data["Shortened"] = "xx"

Api_Key_List1 = ['Key1',
           'Key2',
           'Key3']

raw_data = raw_data[0:3]

LongUrl = raw_data['SMS Click traker'].tolist()
args = [[LongUrl[index], Api_Key_List1[index]] for index,value in enumerate(LongUrl)] 
print("xxxx")

def goo_shorten_url(url,key):
    post_url = 'https://www.googleapis.com/urlshortener/v1/url?key=%s'%key
    payload = {'longUrl': url}
    headers = {'content-type': 'application/json'}
    time.sleep(2)
    r = requests.post(post_url, data=json.dumps(payload), headers=headers)
    return(json.loads(r.text)["id"])

def helper(args):
    return goo_shorten_url(*args)

if __name__ == '__main__':
    p = Pool(processes = 3)
    data = p.map(helper,args)
    print("main")
    raw_data["Shortened"]=data
    p.close()
    print(raw_data)

使用此代码,我可以一次成功缩短多个网址,从而节省了大量时间。以下是一些我难以找到答案的问题:

  1. 我将运行的最佳子流程数是多少? (我使用的是简单的四核处理器8 gb ram笔记本电脑,Windows 7)
  2. 有时由于某些问题,api不会返回缩短的网址。代码永远停滞不前。这是我没有使用多进程时的经验。在这种情况下,这个过程会发生什么?
  3. 假设子进程将被卡住一长串网址(70 000)。如何杀死它并确保代码安全地返回所有剩余的缩短网址并在数据框中进行适当的匹配?
  4. 如何识别那些未缩短的网址?
  5. 我是python编程的新手,请耐心等待。这将有助于我更好地理解多处理的内部工作。

0 个答案:

没有答案