生產者生成**並放入佇列
多個消費者從佇列中取出**
1from 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實現
1import
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 喚...