Advertisement
son_link

Ejemplo de uso de workerpoll

Sep 14th, 2011
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.88 KB | None | 0 0
  1. #!/usr/bin/python2
  2. # -*- coding: utf-8 -*-
  3.  
  4. import os
  5. import urllib
  6. import workerpool
  7. import json
  8.  
  9. from commands import getoutput
  10. from sys import stdout
  11.  
  12. i = 0
  13. class DownloadJob(workerpool.Job):
  14.     "Job for downloading a given URL."
  15.     def __init__(self, pkg):
  16.         self.i = i
  17.         self.porcion = porcion
  18.         self.pkg = pkg # The url we'll need to download when the job runs
  19.     def run(self):
  20.        
  21.         porcentaje = self.porcion*self.i*100
  22.         # partimos pkg en 2, una con el nombre del programa y otro con la versión
  23.        
  24.         # imprimimos en pantalla el progreso
  25.         stdout.write('\rDescargando información de los paquetes desde AUR %i (%i)' % (self.i, porcentaje))
  26.         stdout.flush()
  27.         #print 'Descargando', self.pkg
  28.         pkg = self.pkg.split()
  29.                    
  30.         # Abrimos la url para solicitar a AUR que nos de los datos del programa
  31.         raw = urllib.urlopen('https://aur.archlinux.org/rpc.php?type=info&arg='+pkg[0]).read()
  32.                
  33.         # Y lo pasamos por json para poder obtener los datos
  34.         data = json.loads(raw)
  35.         # Si el paquete existe en AUR type valdra info, en caso contrario vale error
  36.         if data['type'] == 'info':
  37.                        
  38.             # Comprobamos que la versión de AUR es nueva
  39.             isnew = getoutput('vercmp "%s" "%s"' % (data['results']['Version'], pkg[1]))
  40.  
  41.                        
  42.             if isnew == '1':
  43.                 # si la versión de AUR es mas nueva que la local se añade a la lista
  44.                 #aurupdates.append((data['results']['Name'], pkg[1], data['results']['Version']))
  45.                 print data['results']['Name']
  46.        
  47.  
  48. # Iniciamos workpool y le indicamos que ejecute 5 hilos a la vez
  49. pool = workerpool.WorkerPool(size=5)
  50.  
  51. pkgs = getoutput('pacman -Qm').split('\n')
  52. porcion = 1.0/len(pkgs)
  53.  
  54. # Loop over urls.txt and create a job to download the URL on each line
  55. for url in pkgs:
  56.     job = DownloadJob(url)
  57.     i += 1
  58.     pool.put(job)
  59.  
  60. # Send shutdown jobs to all threads, and wait until all the jobs have been completed
  61. pool.shutdown()
  62. pool.wait()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement