On Jan 27, 2008, at 6:22 PM, Java wrote: > No, il proff vuol poter lanciare più processi crawler in parallelo e > poi > vuole che si analizzino i risultati finali.
1. fare le cose in parallelo non implica farle con i thread 2. oltre al modello a processi, c'è pure il modello asincrono. Il quale probabilmente è quello che garantirebbe la migliore efficienza, per inciso. BTW: delle tre cose, la peggiore è quella di usare i thread. > Poi io ho pensato di realizzare la cosa con un programma principale > che > esegue un ciclo nel quale accetta dei comandi dall'utente. Se il > comando > è "crawler" allora aprte il thread. Poi conterrà anche i comandi per > generare la rete sociale dai risultati del crawling (salvati su > file) e > per altre operazioni Risconsiglio i thread. > L'input arriva da "fuori" è un parametro del costruttore del thread, e > anche i vari print mi servono solo per debug, poi li levo tutti e > metto > il try-except Quindi mi pare un errore logico comunque. Prendi 'da fuori' una stringa che rappresenta un'intero e la converti 'ad un certo punto'. La cosa corretta è passare al costruttore il valore giusto. O eventualmente fare smazzare la cosa al costruttore. O se ti piace menartela con i design pattern, vai con l'Adapter (ecco, tipo a me pare una di quelle cose roboanti introdurre una classe apposta per una cosa del genere, specie in Python, ma almeno ci sono le zope.interfaces, va). > me ne ero accorto :-( > Chissà perché ero convinto che così facendo avrei copiato i valori dda > una lista all'altra invece di farle puntare tutte allo stesso oggetto. > In effetti non è un errore di python, ma di programmazione in > generale (>_>) Au contraire! È un errore di Python (ma anche di Java, volendo). In C+ + per esempio in caso di assegnamento c'è tipicamente la copia (a meno che non siano definite cose strane -- e con comunque il 'problema' è una shallow copy). In Python l'assegnamento tipicamente non duplica un valore. Le variabili sono sempre e solo riferimenti ad oggetti. Per copiare un oggetto, usi un metodo che ne crei uno nuovo e ritorni quello. Ovviamente la cosa è rilevante solo con gli oggetti mutabili. Le stringhe sono immutabili: concatenare stringhe con il + è inefficiente precisamente per questa ragione (ogni somma crea una nuova stringa, n somme, creano n stringhe). > il for è la prima cosa a cui penso (dopo anni di c, c++, java etc etc) > ma mi "forzo" ad usare le list comprecose per impararle bene In primo luogo il for di Python è *diverso* da quello di C++. Ma a parte questo usare le list comprehensions a sproposito non è un buon modo per impararle. Posto che quello che hai scritto è sintatticamente corretto, chiunque leggesse quel codice si chiederebbe se sei consapevole che extend modifica in place e che cosa vuoi fare con una lista di None. L'idea della list comprehension è questa: costruisci una lista di f(x) con gli x provenienti da un iterabile (se vale una certa condizione su x). In pratica nella list comprehension il return value è pragmaticamente importante. > Naaaa i "fondamentali" sono tutti i linguaggi che già conosco :-p Mah. Ribadisco, un'occhiatina alla semantica di Python la darei, tanto per evitare altre cattive sorprese. _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python