Perangkak web - bagaimana untuk bekerjasama dengan permintaan dalam pelbagai proses python
阿神
阿神 2017-06-22 11:52:30
0
2
765

Ini ialah kod untuk pelaksanaan berurutan satu proses:

import requests,time,os,random

def img_down(url):
    with open("{}".format(str(random.random())+os.path.basename(url)),"wb") as fob:
        fob.write(requests.get(url).content)

urllist=[]
with open("urllist.txt","r+") as u:
    for a in u.readlines():
        urllist.append(a.strip())

s=time.clock()
for i in range(len(urllist)):
    img_down(urllist[i])
e=time.clock()

print ("time: %d" % (e-s))

Ini ialah kod untuk pelbagai proses:

from multiprocessing import Pool
import requests,os,time,random

def img_down(url):
    with open("{}".format(str(random.random())+os.path.basename(url)),"wb") as fob:
        fob.write(requests.get(url).content)

if __name__=="__main__":
    urllist=[]
    with open("urllist.txt","r+") as urlfob:
        for s in urlfob.readlines():
            urllist.append(s.strip())

    s=time.clock()
    p=Pool()
    for i in range(len(urllist)):
        p.apply_async(img_down,args=(urllist[i],))
    p.close()
    p.join()
    e=time.clock()
    
    print ("time: {}".format(e-s))

Tetapi hampir tiada perbezaan antara masa yang dihabiskan dalam satu proses dan berbilang proses Masalahnya mungkin permintaan menyekat IO Adakah pemahaman anda betul?
Terima kasih!

阿神
阿神

闭关修行中......

membalas semua(2)
phpcn_u1582

Kemacetan menulis fail adalah cakera IO, bukan Paralelisme tidak mempunyai banyak kesan Anda boleh cuba untuk tidak menulis fail dan membandingkan masa

刘奇

Kolam tanpa parameter menggunakan
os.cpu_count() atau 1
Jika ia adalah CPU teras tunggal, atau nombor tidak dapat dikumpulkan, hanya ada satu proses.

Sepatutnya itulah sebabnya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan