botalka/utils/queues.py
emmatveev bb4c6d4748
All checks were successful
Deploy Dev / Build (pull_request) Successful in 5s
Deploy Dev / Push (pull_request) Successful in 8s
Deploy Dev / Deploy dev (pull_request) Successful in 8s
fix
2024-12-08 11:35:54 +03:00

47 lines
1.3 KiB
Python

import time
import tasks_pb2_grpc
import tasks_pb2
from google.protobuf import json_format
class QueuesException(Exception):
...
class TasksHandlerMixin:
def poll(self):
while True:
response: tasks_pb2.TakeResponse = self.stub.Take(tasks_pb2.TakeRequest(queue=self.queue_name))
task: tasks_pb2.Task = response.task
if not task:
time.sleep(0.2)
continue
try:
payload = json_format.MessageToDict(task.payload)
self.process(payload)
except Exception as exc:
print(f'Error processing message id={task.id}, payload={payload}, exc={exc}')
continue
try:
self.stub.Finish(tasks_pb2.FinishRequest(id=task.id))
except:
print(f'Failed to finish task id={task.id}')
@property
def queue_name(self):
raise NotImplemented
def process(self, payload):
raise NotImplemented
def set_task(stub: tasks_pb2_grpc.TasksStub, queue_name: str, payload: dict, seconds_to_execute: int, delay: int|None = None):
stub.Put(
tasks_pb2.PutRequest(
queue=queue_name,
seconds_to_execute=seconds_to_execute,
delay=delay,
payload=payload
)
)