-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathqueue2.py
More file actions
49 lines (39 loc) · 1.23 KB
/
Copy pathqueue2.py
File metadata and controls
49 lines (39 loc) · 1.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# -*- coding: utf-8 -*-
from queue import Queue
from threading import Thread
# количество потоков обслуживающих очередь
num_worker_threads=2
def do_work(item):
"""
Функция иммитирующая полезную работу
"""
s=str(item)
print(s[::-1])
def worker():
"""
Основной код здесь
"""
while True:
# Получаем задание из очереди
item = q.get()
do_work(item)
# Сообщаем о выполненном задании
q.task_done()
def source():
"""
Функция генерирующая данные для очереди
"""
for i in range(100, 105):
yield i
# Создаем FIFO очередь
q = Queue()
# Создаем и запускаем потоки, которые будут обслуживать очередь
for i in range(num_worker_threads):
t = Thread(target=worker)
t.setDaemon(True)
t.start()
# Заполняем очередь заданиями
for item in source():
q.put(item)
# Ставим блокировку до тех пор пока не будут выполнены все задания
q.join()