Pereiti prie turinio

PYTHON reikia pagalbos pagreitinti skripto darbą


Rekomenduojami pranešimai

Sveiki, reikia pagalbos su python, esu susikūręs botą, bei norėčiau, jog jis dirbtų greičiau. Skenuojant iš .txt failo jungdavau 10 threads ir taip skenuodavo greitai, bet perėjus ant mysql, užduotį vykdo while ciklas, kaip galima paspartinti darbą? pajungus 2x programas, duomenys tikrinami tie patys. Procesoriaus, bei interneto neišnaudoja. Kaip galima paspartinti? Skriptas jungiasi į svetainę ir išgauna duomenis su requests.

Redagavo Programmes
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labai neaiškus klausimas - ką tu skenuoji iš .txt, ką gauni iš mysql, ką requestini iš svetainės, ką tavo scriptas apskritai daro ir t.t.

Paprastas sprendimas nesigilinant į tavo problemą - skirstyt input set'ą į kelias dalis (pvz. jeigu nori nuscrapinti daug puslapių, splitini 100 svetainių po 25) ir kiekvienai daliai pajungti atskirą procesą

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Labai neaiškus klausimas - ką tu skenuoji iš .txt, ką gauni iš mysql, ką requestini iš svetainės, ką tavo scriptas apskritai daro ir t.t.

Paprastas sprendimas nesigilinant į tavo problemą - skirstyt input set'ą į kelias dalis (pvz. jeigu nori nuscrapinti daug puslapių, splitini 100 svetainių po 25) ir kiekvienai daliai pajungti atskirą procesą

 

vyksta while ciklas, cikle yra funkcijos naudojimas į kurią siunčia login ir password, funkcijoje jungiasi per requests su POST į svetainę ir žiūri cookies, jei užsettina, updatina duomenų bazėj tą įrašą, jei ne ištrina. Ir taip sukasi.

 

Aš pats galvoju, kad reik dalint while į kelias dalis, bet kaip man sudėt tuos while ciklus į atskirus procesus?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

vyksta while ciklas, cikle yra funkcijos naudojimas į kurią siunčia login ir password, funkcijoje jungiasi per requests su POST į svetainę ir žiūri cookies, jei užsettina, updatina duomenų bazėj tą įrašą, jei ne ištrina. Ir taip sukasi.

 

Aš pats galvoju, kad reik dalint while į kelias dalis, bet kaip man sudėt tuos while ciklus į atskirus procesus?

 

Tai padaryk multi-threading'ą - pradžioj sukuri mysql connection'ą, retrievini loginus, paskirstai juos į dalis

(kodo pavyzdys iš SO)

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

sukuri thread'ų pool'ą ir kiekvienam duodi chunką su funkcija, kuri varytų per tą chunką. Reikės greičiau - padidinsi threadų skaičių; pritrūks resursų - sumažinsi

 

MySQL turbink

Kartais geriau patylėt

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai padaryk multi-threading'ą - pradžioj sukuri mysql connection'ą, retrievini loginus, paskirstai juos į dalis

(kodo pavyzdys iš SO

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

sukuri thread'ų pool'ą ir kiekvienam duodi chunką su funkcija, kuri varytų per tą chunką. Reikės greičiau - padidinsi threadų skaičių; pritrūks resursų - sumažinsi

 

 

Kartais geriau patylėt

 

o plačiau apie patį threads sukūrimą?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

o plačiau apie patį threads sukūrimą?

def processing(login)
username = login[0]
password = login[1]
requests.get(...)
...
end

logins = [('username1', 'password1'), ('username2', 'password2'), ('username3', 'password3') ]
pool = ThreadPool(10) # 10 - thread'ų skaičius 
pool.map(processing, logins)
pool.close()
pool.join()

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

def processing(login)
username = login[0]
password = login[1]
requests.get(...)
...
end

logins = [('username1', 'password1'), ('username2', 'password2'), ('username3', 'password3') ]
pool = ThreadPool(10) # 10 - thread'ų skaičius 
pool.map(processing, logins)
pool.close()
pool.join()

 

 

importint bandau multiprocessing bet gaunu errorą. Command "python setup.py egg_info" failed with error code 1 in C:\Users\ferne\AppData\Local\Temp\pip-install-oj6m7zpo\multiprocessing\

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai padaryk multi-threading'ą - pradžioj sukuri mysql connection'ą, retrievini loginus, paskirstai juos į dalis

(kodo pavyzdys iš SO)

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

sukuri thread'ų pool'ą ir kiekvienam duodi chunką su funkcija, kuri varytų per tą chunką. Reikės greičiau - padidinsi threadų skaičių; pritrūks resursų - sumažinsi

 

 

Kartais geriau patylėt

 

Kartais geriau suprasti, kad ir MySQL turi įtakos....

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kartais geriau suprasti, kad ir MySQL turi įtakos....

 

Žinoma, turi, bet tikrai MySQL ne bottleneckas situacijoj kai single-threadas daro 1 paprastą query kas kelias sekundes (ypač, kai labai tikėtina kad kalbama apie mažą duomenų kiekį), o visą laiką suvalgo po vieną bevaikštantys HTTP requestai

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...