-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathutils_queue.py
38 lines (30 loc) · 916 Bytes
/
utils_queue.py
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
import queue
import threading
import uuid
class TaskQueue:
def __init__(self, func):
self.func = func
self.queue = queue.Queue()
self.results = {}
self.thread = threading.Thread(target=self.process)
def process(self):
while True:
item = self.queue.get()
if item is None:
break
task_id = item[0]
event = item[1]
result = self.func(*item[2:])
self.results[task_id] = result
self.queue.task_done()
event.set()
def start(self):
self.thread.start()
print(f'thread id: {self.thread.ident}')
def put(self, *args):
task_id = str(uuid.uuid4())
event = threading.Event()
self.queue.put((task_id, event) + args)
return task_id, event
def get(self, task_id):
return self.results.pop(task_id)