Topic: Multiprocessing ricerca stringa su files  (Letto 36 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline tascio

  • python erectus
  • ***
  • Post: 175
  • Punti reputazione: 0
    • Mostra profilo
Multiprocessing ricerca stringa su files
« il: Maggio 22, 2019, 14:59 »
Il mio obiettivo è iniziare una ricerca di una parola su più file contenuti in una dir contemporaneamente
from grepfunc import grep
import os
from multiprocessing import Pool
import multiprocessing

def func(file):
    print(file, int(((os.stat(file).st_size)/1024)/1024), 'MB')
    print(grep(open(file,mode='r',encoding='utf-8',errors='ignore'), "parola test", i=True))
def cerca(cartella):
    for file in cartella:
        return file

cartella = os.listdir('.')

pool = Pool(5)
pool.map(func,cerca(cartella))


viene eseguito, impegna la cpu, ma non succede niente

Offline bebo

  • python erectus
  • ***
  • Post: 238
  • Punti reputazione: 0
    • Mostra profilo
    • bebo_sudo's personal homepage
Re:Multiprocessing ricerca stringa su files
« Risposta #1 il: Maggio 22, 2019, 15:57 »
Cioe' se apri top o htop non vedi tutti gli N processori occupati? Come mai poi hai usato N=5 nel pool? quanti core hai? Se usi piu' processi del numero di core, rischi che si pestino i piedi tra di loro, e che il tutto vada piu' lento che usando N=numero max di processori. Occhio anche che l'hyper threading ti da un "finto" processore in piu', non so se per questo caso d'uso sia utile, dovresti testarlo.

Non e' piu' facile forse aprire N terminali e lanciare grep su diverse porzioni separate di file?

Oppure usare invece qualcosa di gia' multicore come ripgrep? E' gia' pacchettizzato per la maggior parte degli OS e per varie distro linux: https://github.com/BurntSushi/ripgrep#installation