爬蟲 生產者消費者

2022-07-20 17:30:16 字數 2330 閱讀 7246

生產者生成**並放入佇列

多個消費者從佇列中取出**

1

from queue import

queue

2import

time, threading, requests

34 url_base = '

'5 header ={}67

defload_data():

8return [url_base.format(i) for i in [1, 3, 6, 7]]910

#生產者

11def

produce(q):

12 index =0

13 data =load_data()

14while

true:

15if index 16q.put(data[index])

17 index += 1

1819

#消費者

20def

consume(q):

21while

true:

22 download_url =q.get()23#

requests.get(download_url,headers=header)

24print('

thread is {} content is {}

'.format(threading.current_thread(), download_url))

2526

defmain():

27 q = queue(4)

28 p1 = threading.thread(target=produce, args=[q])

29 c1 = threading.thread(target=consume, args=[q])

30 c2 = threading.thread(target=consume, args=[q])

31p1.start()

32c1.start()

33c2.start()

3435

if__name__ == '

__main__':

36 main()

爬蟲類需要繼承多執行緒類

初始化方法需要繼承父類初始化方法

建立物件,直接start就會呼叫類中run方法

1

#class consumespider(threading.thread):2#

def __init__(self):3#

super().__init__()4#

pass5#

6#def run(self):7#

pass8#

9#c3 = consumespider()10#

c3.start()

協程(coroutine):輕量級的執行緒,不存在上下文切換,能在多個任務之間排程的多工方式,可以使用yield實現

1

import

time, threading23

deftask_1():

4while

true:

5print('

-----1-----

', threading.current_thread())

6 time.sleep(1)

7yield89

10def

task_2():

11while

true:

12print('

-----2-----

', threading.current_thread())

13 time.sleep(1)

14yield

1516

17def

main():

18 t1 =task_1()

19 t2 =task_2()

20while

true:

21next(t1)

22next(t2)

2324

25if

__name__ == '

__main__':

26main()

27

請使用手機"掃一掃"x

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...

生產者消費者

using system using system.collections.generic using system.threading namespace gmservice foreach thread thread in producers q.exit console.read public...

生產者消費者

執行緒通訊 乙個執行緒完成了自己的任務時,要通知另外乙個執行緒去完成另外乙個任務.wait 等待 如果執行緒執行了wait方法,那麼該執行緒會進入等待的狀態,等待狀態下的執行緒必須要被其他執行緒呼叫notify方法才能喚醒。notify 喚醒 喚醒執行緒池等待執行緒其中的乙個。notifyall 喚...