多线程python

2024-10-01 07:12:32 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法,我可以多线程的功能,采取5个网址的名单在同一时间?请看下面我的代码。它的python2.7

import requests, csv, time, json, threading
from lxml import html
from csv import DictWriter

All_links = ['http://www.clopaydoor.com/api/v1/dealerlocator/getdealers?latitude=42.343097&longitude=-71.123046&doorType=residential&isFirstSearch=true&isHomeDepot=false&isClopayDealer=true&radius=3000&country=USA',
'http://www.clopaydoor.com/api/v1/dealerlocator/getdealers?latitude=42.398588&longitude=-71.24505&doorType=residential&isFirstSearch=true&isHomeDepot=false&isClopayDealer=true&radius=3000&country=USA',
'http://www.clopaydoor.com/api/v1/dealerlocator/getdealers?latitude=42.394319&longitude=-71.218049&doorType=residential&isFirstSearch=true&isHomeDepot=false&isClopayDealer=true&radius=3000&country=USA',
'http://www.clopaydoor.com/api/v1/dealerlocator/getdealers?latitude=42.365396&longitude=-71.23165&doorType=residential&isFirstSearch=true&isHomeDepot=false&isClopayDealer=true&radius=3000&country=USA',
'http://www.clopaydoor.com/api/v1/dealerlocator/getdealers?latitude=42.356719&longitude=-71.250479&doorType=residential&isFirstSearch=true&isHomeDepot=false&isClopayDealer=true&radius=3000&country=USA',
'http://www.clopaydoor.com/api/v1/dealerlocator/getdealers?latitude=42.385096&longitude=-71.208399&doorType=residential&isFirstSearch=true&isHomeDepot=false&isClopayDealer=true&radius=3000&country=USA',
'http://www.clopaydoor.com/api/v1/dealerlocator/getdealers?latitude=42.334146&longitude=-71.183298&doorType=residential&isFirstSearch=true&isHomeDepot=false&isClopayDealer=true&radius=3000&country=USA',
'http://www.clopaydoor.com/api/v1/dealerlocator/getdealers?latitude=42.374296&longitude=-71.182371&doorType=residential&isFirstSearch=true&isHomeDepot=false&isClopayDealer=true&radius=3000&country=USA']

target = open('completedlinks.txt','ab')
def get_data(each):
    each = each.strip('\n')
    r = requests.get(each)
    source = json.loads(r.content)
    the_file = open("output.csv", "ab")
    writer = DictWriter(the_file, source[1].keys())
    writer.writeheader()
    writer.writerows(source)
    the_file.close()
    target.write(each+'\n')
    print each+"\n--------------------------"


for each in All_links:
    try:
        get_data(each)
    except:
        pass

Tags: comapitruehttpwwwv1latitudelongitude
1条回答
网友
1楼 · 发布于 2024-10-01 07:12:32

查看multiprocessing package。它实现了线程池,这将实现这一点。你知道吗

更新: 添加这样的内容应该可以

from multiprocessing import Pool

def chunks(l, n): 
""" Yield successive n-sized chunks from l. """ 
    for i in xrange(0, len(l), n): 
        yield l[i:i+n]

def threadit(threads, links):
    for part in chunks(links, threads):
        pool = Pool(threads)
        for link in part:
            pool.apply_async(getdata, args=(link,))
        pool.close()
        pool.join()

threadit(5, All_links)

相关问题 更多 >