Питон веб-сканеры (2) Обзор программирования Python

Запись файлов

Защиту storFile (данные, имя файла, метод = 'A'): 
    с открытой (имя_файла, метод перевода строки = '') , как F: 
        f.write (данные) 
        проходят 
    проходят 

storFile ( '123', '1.txt')

Файл Read

с открытой ( '1.txt', 'R') , как F: 
    печать (f.read ())

Последовательность операций

Данные могут быть сохранены в памяти и становится долю, чтобы достичь состояния сохранности. cPickle написан на С, высокой эффективностью, приоритетного использования. Если нет использовать рассол. рассол с помощью дампа и отвалов реализовать сериализацию.

попробовать: 
    импорт cPickle как рассол , 
кроме ImportError: 
    импорт рассола 
д = ДИКТ (URL = 'index.html', название = '1', содержание = '2') 
F = открыт ( '2.txt', 'термометра') 
рассол .dump (д, е) 
f.close () для 
печати (pickle.dumps (д))

Deserialize

Используйте нагрузку для достижения десериализации

попробуйте: 
    импорт cPickle как рассол , 
кроме ImportError: 
    импорт рассол 
е = открытая ( '2.txt', 'гь') 
d = pickle.load (е) 
f.close () 
печать (d)

Создание мульти-процесс

использование Os из многопроцессных репликативной вилки точно такой же процесса, и ребенка возвращается 0, возвращение дочернего процесса родительского процесса. Только в Linux / Unix в.

импорт ОС 
если __name__ == '__main__': 
  PID = os.fork () ,   если PID <0:    печать ( 'ошибка ПИД - регулятора')   Элиф PID == 0:    печать ( 'ребенок, родитель PID', os.getpid (), os.getppid ())   еще:    печать ( 'родитель PID, создать ребенок', os.getpid, ИДП)

Используйте MultiProcessing процесс создания модуля, используйте начать, чтобы начать процесс, использовать присоединиться к синхронизации.

импорт ОС 
из многопроцессорных импорта Процесс 
четкости run_proc (имя): 
    печать ( 'имя, ребенок Pid работает', имя, os.getpid ()) , 
если __name__ == '__main__': 
    печать ( 'родительский PID', os.getpid () ) 
    для г в интервале (5): 
        р = Process (целевой = run_proc, Args = (ул (I),)) 
        печать ( 'Процесс начнет') 
        p.start () 
    p.join () 
    печать ( 'конец' )

Количество многопроцессорных модулей с использованием процесса определяется Пул

импорт ОС 
от многопроцессорных импорта процесса, бассейн 
импорт случайных, время 
четкости run_proc (имя): 
    печать ( 'имя, дочернего процесса работает', имя, os.getpid ()) 
    time.sleep (random.random () * 10) 
    печать ( 'имя, ребенок Pid работает конец', имя, os.getpid ()) , 
если __name__ == '__main__': 
    печать ( 'родительский PID', os.getpid ()) 
    р = бассейн (процессы = 3) 
    для я в диапазоне (10): 
        p.apply_async (run_proc, Args = (я)) 
    печать ( 'ждать') 
    p.close () 
    p.join () 
    печать ( 'конец')

межпроцессная коммуникация

очереди Communications

Подходит для связи между несколькими процессами, использование пут и получить методы.

импорт ОС 
от многопроцессорной процесса импорта, очередей 
времени импорта, случайной 
четкости write_proc (Q, URL): 
    печать ( «ш обработка», os.getpid (), «работает») 
    для и в адресах: 
        q.put (и) 
        печати ( 'говоря:', и) 
        time.sleep (random.random ()) 
    проходят 
защиту read_proc (д): 
    печать ( 'г обработка', os.getpid (), 'бежит') , 
    а (True): 
        и = q.get (True) 
        печати ( 'получим:', и) 
    проходят , 

если __name__ == '__main__': 
    д = Queue () 
    w1 = Process (цель = write_proc, Args = (Q, [ 'u1', 'u2' , 'и3'])))) 
    W1.start () 
    w2.start () 
    w2 = Процесс (мишень = write_proc, Args = (д, [ 'и4','U5', 'u6']))
    R1 = Процесс (цель = read_proc, Args = (Q,))
    r1.start () 
    w1.join () 
    w2.join () 
    r1.terminate () 
    передача

Труба связи

Трубы и conn2 метод возвращает conn1, и может посылать и принимать полнодуплексный режим (дуплекс трубы метод управления параметрами), путем отправки и управления Recv.

импорт ОС 
от многопроцессорной процессе импорта труб 
время импорта, случайной 
четкости send_proc (р, URL): 
    печать ( «s обработка», os.getpid (), «работает») 
    для и в адресах: 
        p.send (и) 
        печати ( 'отправить:', U) 
        time.sleep (random.random ()) 
    передать 
четкости receive_proc (P): 
    печать ( 'г обработка', os.getpid (), 'работает') , 
    а (True): 
        и = p.recv () для 
        печати ( 'получим:', U) 
    проходит , 

если __name__ == '__main__': 
    р = Труба () 
    р1 = Процесс (мишень = send_proc, Args = (р [0], [ 'u1',» и2' , 'и3'])) 
    р2 = Процесс (мишень = receive_proc, Args = (р [1],)) 
    P1.start ()
    p2.start () 

    p1.join () 
    p2.terminate () 
    передача

Многопоточность

Чуть больше понимания . Создание многопоточных модуля использование многопоточности

время импорта, случайный, резьб 

четкости run_proc (URL): 
    печать (. 'имя', потоковой threading.current_thread имя ()) 
    для и в URL: 
        . печать (threading.current_thread) имя ( '----->' , и) 
        time.sleep (random.random ()) 
    печать ( 'конец', threading.current_thread () имя). 
    передать , 

если __name__ == '__main__': 
    печать. ( 'бег:', threading.current_thread () имя ) 
    w1 = threading.Thread (мишень = run_proc, имя = 'Т1', Args = ([ 'u1', 'u2', 'и3'])) 
    w2 = threading.Thread (мишень = run_proc, имя = 'Т2 », арг = ([ 'и4', 'U5', 'U6'],)) 
    w1.start () 
    w2.start () 
    w1.join () 
    w2.присоединиться () 
    печать ( «конец») 
    проход

Threading.Thread использовать наследование для создания нитей категории: Исходный код: https://github.com/qiyeboy/SpiderBook

импорт случайный 
импорта потокового 
время импорта 
класс MyThread (threading.Thread): 
    Защита __init __ (я, имя, URL): 
        threading.Thread .__ INIT __ (я, имя = имя) 
        self.urls = URLs 

    Защиты работать (самостоятельно): 
        печать (» Текущий% s работает ...»% threading.current_thread имя ()). 
        для URL в self.urls: 
                . печать ( '---- >>>% s' % (threading.current_thread) имя% s (, URL)) 
                time.sleep (random.random ()) 
        печать ( "% s закончился.% threading.current_thread имя) (). 
        
печать ( '% s работает ...% threading.current_thread () имя.)  
t1 = MyThread (имя = 'Thread_1', URL = [ 'URL_1', 'url_2', 'url_3'])
t2 = MyThread (имя = 'Thread_2', URLs = [ 'url_4', 'url_5', 'url_6']) 
T1.start () 
t2.start ()
t1.join () 
t2.join () 
печать ( "% s закончился.% threading.current_thread) имя (.)

Синхронизация потоков

Синхронизация потоков в целях защиты данных, есть два варианта блокировки и RLOCK. См . Кроме того, существование глобальной блокировки интерпретатора, ограничение доступа к теме ресурсов ЦП ресурсоемких приложений , как правило, используют несколько процессов. Для ввода - вывода интенсивных приложений, использование многопоточности.

импорт потоковой 
mylock = threading.RLock () 
Num = 0 
класса MyThread (threading.Thread): 
    Защита __init __ (я, имя): 
        threading.Thread .__ INIT __ (я, имя = имя) 

    Защита запуска (сам): 
        глобальный Num , 
        а правда : 
            mylock.acquire () для 
            печати ( '% s заблокирован, номер:% d' имя, Num)% (threading.current_thread ().) , 
            если число> = 100: 
                mylock.release () для 
                печати ( «% s выпущен, номер :% d '% (. threading.current_thread () имя, Num)) 
                перерыв 
            Num + = 1 
            печать ( '% s выпущен, номер:.% d' % (threading.current_thread () наименование, Num))
            mylock.release () 
 , 
если __NAME __ == '__main__': 
    thread1 = MyThread (' Thread_1')
    thread2 = MyThread ( 'Thread_2') 
    thread1.start () 
    thread2.start ()

 

рекомендация

отwww.cnblogs.com/bai2018/p/10959955.html