>  기사  >  백엔드 개발  >  Python 크롤러 스레드 및 프로세스 사용(코드 포함)

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

不言
不言앞으로
2018-09-28 14:31:371660검색

이 문서는 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으로 문의하시기 바랍니다. 삭제