Доброй ночи.
Интересует вопрос связанный с Queue и Threading в Python.
Пишу небольшое многопоточное приложение.
from queue import Queue
from threading import Thread
from grab import Grab
def do_work(link):
g = Grab()
g.setup(timeout=30, connect_timeout=5)
g.go(link)
print(q.qsize())
def worker():
while True:
link = q.get()
do_work(link)
q.task_done()
q = Queue()
num_worker_threads = 50
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
list_urls = [
# big list with urls
]
for item in list_urls:
q.put(item)
q.join()
В итоге в консоли получаю:
...
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
0
0
0
0
0
0
0
0
0
0
...
В конце получаю такое кол-во нулей сколько выставлено потоков. И да если у меня в листе 500 ссылок, то очередь будет равна 450. Почему так?