cari

Rumah  >  Soal Jawab  >  teks badan

Perangkak web - bagaimana untuk bekerjasama dengan permintaan dalam pelbagai proses python

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!

阿神阿神2750 hari yang lalu786

membalas semua(2)saya akan balas

  • phpcn_u1582

    phpcn_u15822017-06-22 11:54:30

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

    balas
    0
  • 怪我咯

    怪我咯2017-06-22 11:54:30

    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.

    balas
    0
  • Batalbalas