запустить одновременно N его копий. Про многопоточность я уже написал один пост, который полностью состоит из быдлокода=) С тех пор, я чутка поумнел и для организации потоков наследуюсь от класса Thread. С многопроцессовостью всё аналогично, только классы другие, а методы и структура вся та же.
# coding: utf8
import spynner
from spynner import browser
import multiprocessing
from multiprocessing import Process
class Serfer(multiprocessing.Process):
def __init__(self,queue):
multiprocessing.Process.__init__(self)
self.__queue = queue # наша очередь заданий
self.kill_received = False # На всякий случай переменная, вдруг надо будет всё остановить
def run(self):
while not self.kill_received:
try: item = self.__queue.get_nowait() # ждём данные
except Queue.Empty: break
error = True
try: error = self.serfing(item)
except: traceback.print_exc()
time.sleep(0.1)
self.__queue.task_done() # задача завершена
if error: self.__queue.put(item) # Если была ошибка, то еще раз с этими данными
return
def serfing(self,url):
br = browser.Browser() # запускаем браузер
br.create_webview()
br.show() # отображаем
br.load(url) # загружаем страницу
br.wait_a_little(75)
br.destroy_webview()
br.close() # закрываем браузер
def main():
queue = multiprocessing.JoinableQueue() # создаем очередь заданий
processes = 5
# Урлы по которым надо будет перейти в браузере
urls = ["http://ya.ru","http://google.ru","http://yahoo.com",
"http://bing.com","http://rambler.ru"]
for url in urls:
queue.put(url) # заносим данные в очередь
for i in xrange(processes):
t = Serfer(queue) # создаем процесс
t.start() # стартуем
time.sleep(0.1)
queue.join() # приостанавливаем дальнейшее выполнение кода, пока очередь не опустошится
print "Done"
if __name__ == '__main__':
main()