> 백엔드 개발 > 파이썬 튜토리얼 > Python 크롤러 스레드 및 프로세스 사용(코드 포함)

Python 크롤러 스레드 및 프로세스 사용(코드 포함)

不言
풀어 주다: 2018-09-28 14:31:37
앞으로
1739명이 탐색했습니다.

이 문서는 Python 크롤러 스레드 및 프로세스(코드 포함) 사용에 대한 내용을 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 필요한 친구에게 도움이 되기를 바랍니다.

Process

  • 를 사용하여 클래스 라이브러리를 가져옵니다.

import multiprocessing
로그인 후 복사
  • 프로세스 만들기

p1 = multiprocessing.Process(target=test1)
로그인 후 복사

프로세스 매개변수: group=None, target=None, name=None, args=(), kwargs={ })

  • 전역 변수

import time, os
import multiprocessing

nums = [11, 22, 33]
def test():
    nums.append(44)
    print('在进程1中nums=%s' % str(nums),id(nums))
    time.sleep(3)
def test2():
    print('在进程2中nums=%s' % str(nums),id(nums))
def main():
    print('----in 主进程 pid=%d----父进程pid=%d----' % (os.getpid(), os.getppid()))
    p = multiprocessing.Process(target=test)
    p.start()

    p2 = multiprocessing.Process(target=test2)
    p2.start()   
     # test()    
     # test2()
     if __name__ == '__main__':
    main()
로그인 후 복사

전역 변수는 프로세스가 복사되므로 프로세스 간에 공유되지 않습니다.

Threads

Use

  • 클래스 라이브러리 가져오기

import threading
로그인 후 복사
  • 만들기 위해 스레드

t1 = threading.Thread(target=test1,args=(1000000,))
로그인 후 복사

스레드 매개변수: group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None

  • 전역 변수

import time,threading

g_num = 0
mutex = threading.Lock()
def test1(num):    
global g_num    
# mutex.acquire()     
    for i in range(num):
        mutex.acquire()
        g_num += 1
        mutex.release()    
        # mutex.release()
    print('-------in test1 g_num=%d-----' % g_num)
def test2(num):    
global g_num    
# mutex.acquire()     
    for i in range(num):
        mutex.acquire()
        g_num += 1
        mutex.release()    
        # mutex.release()
    print('-------in test2 g_num=%d-----' % g_num)
def main():
    t1 = threading.Thread(target=test1,args=(1000000,))
    t2 = threading.Thread(target=test2,args=(1000000,))
    t1.start()
    t2.start()
    time.sleep(3)
    print('-------------in main Thread g_num = %d----' % g_num)
 if __name__ == '__main__':
    main()
로그인 후 복사

중요 섹션만 동시에 프로그램은 변경된 위치를 포함하여 실행을 위해 코드 블록에 들어갑니다. 다른 스레드 호출이 획득되면 현재 스레드는 대기 상태로 들어갑니다. 생산자 패턴

생산자-소비자 패턴은 스레드 간 통신의 응용입니다

    데이터 구조를 사용할 때 스레드로부터 안전한지 확인하세요. 대기열 자체는 스레드로부터 안전하고 목록 목록([]), 사전 dic( {})는 스레드로부터 안전하지 않습니다.
  • def set_value(q):
        index = 0    
        while True:
            q.put(index)
            index += 1
            q.put(index)
            index += 1
            time.sleep(2)
    def get_value(q):    
    while True:
            print('消费者获取数据:',q.get())   #若队列为空就sleep休眠,直到队列有数据def main():
        q = Queue(4)
        t1 = threading.Thread(target=set_value,args=[q])
        t2 = threading.Thread(target=get_value,args=[q])
        t1.start()
        t2.start()
    로그인 후 복사

    위 내용은 Python 크롤러 스레드 및 프로세스 사용(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿