Python爬蟲 程序和執行緒2

2022-08-10 18:00:15 字數 3049 閱讀 7658

1、使用threading模組建立執行緒

方式一:把函式傳入並建立thread例項,然後呼叫start方法開始執行

# coding=utf8

"""建立多執行緒的方式一:

把函式傳入並建立thread例項,然後呼叫start方法開始執行

"""import random, time

import threading

def thread_run(urls):

print 'current thread %s is running...' % threading.current_thread().name

for url in urls:

print '%s -->>> %s' % (threading.current_thread().name, url)

time.sleep(random.random())

print '%s ended.' % threading.current_thread().name

if __name__ == '__main__':

print 'current thread %s is running...' % threading.current_thread().name

t1 = threading.thread(target=thread_run, name='thread_1', args=(['url_1','url_2','url_3'],))

t2 = threading.thread(target=thread_run, name='thread_2', args=(['url_4','url_5','url_6'],))

t1.start()

t2.start()

t1.join()

t2.join()

print '%s ended.' % threading.current_thread().name

方式二:繼承thread類,重寫__init__和run方法
# coding=utf8

'''建立多執行緒方式二:

繼承thread類,重寫__init__和run方法

'''import threading

import time, random

class mythread(threading.thread):

def __init__(self, name, urls):

threading.thread.__init__(self, name=name)

self.urls = urls

def run(self):

print 'current thread %s is running...' % threading.current_thread().name

for url in self.urls:

print '%s -->>> %s' % (threading.current_thread().name, url)

time.sleep(random.random())

print '%s ended.' % threading.current_thread().name

if __name__ == '__main__':

print 'current thread %s is running...' % threading.current_thread().name

t1 = mythread(name='thread_1', urls=['url_1','url_2','url_3'])

t2 = mythread(name='thread_2', urls=['url_4','url_5','url_6'])

t1.start()

t2.start()

t1.join()

t2.join()

print '%s ended.' % threading.current_thread().name

2、執行緒同步

使用lock和rlock可以實現簡單的執行緒同步,將每次只允許乙個執行緒操作的資料放到acqure和release方法之間

# coding=utf8

import threading

mylock = threading.rlock()

num = 0

class mythread(threading.thread):

def __init__(self,name):

threading.thread.__init__(self, name=name)

def run(self):

global num

while true:

mylock.acquire()

print '%s locked, number: %d' % (threading.current_thread().name, num)

if num >= 4:

mylock.release()

print '%s released, number: %d' % (threading.current_thread().name, num)

break

num += 1

print '%s released, number: %d' % (threading.current_thread().name, num)

mylock.release()

if __name__ == '__main__':

thread1 = mythread('thread_1')

thread2 = mythread('thread_2')

thread1.start()

thread2.start()

輸出1:

輸出2:

Python爬蟲 程序和執行緒1

1 使用multiprocessing 模組建立多程序 process process類描述乙個程序物件,建立process例項只需要傳入乙個函式和函式的引數即可。使用 process 方法建立程序 使用 start 方法啟動程序 使用 join 方法實現程序同步 乙個例子 coding utf8 ...

Python爬蟲 非同步爬蟲(多程序和多執行緒)

非同步爬蟲 在爬蟲中使用非同步實現高效能的資料爬取操作 執行緒是程式執行的最小單位,乙個程序可以有多個執行緒。非同步爬蟲的方式 多程序,多執行緒 不建議 好處 可以為相關阻塞的操作單獨開啟程序或者執行緒,阻塞操作就可以非同步執行 繼續執行阻塞的操作之後的 弊端 無法無限制地開啟多程序或者多執行緒 程...

python 爬蟲 多執行緒 多程序

乙個程式至少有乙個程序,乙個程序至少有乙個執行緒.資源 程序擁有獨立資源,執行緒依賴於程序,沒有獨立資源,所有該程序的執行緒共享所在程序的所有資源。劃分尺度 執行緒的劃分尺度小於程序 資源比程序少 使得多執行緒程式併發性更高。執行緒 執行緒的執行開銷小,但不利於資源的管理和儲存。程序 多個程序之間相...