This commit is contained in:
2024-12-08 11:20:54 +03:00
parent 784a2ed393
commit b3e44c4532
10 changed files with 81 additions and 67 deletions

View File

@@ -1,27 +0,0 @@
import requests
LOCKS_URL = 'http://locks'
class Conflict(Exception):
pass
def acquire(name: str, ttl: int = 1):
resp = requests.post(f'{LOCKS_URL}/api/v1/acquire', json={
'name': name,
'ttl': ttl,
})
if resp.status_code == 409:
raise Conflict
if resp.status_code != 202:
raise Exception
def release(name: str):
resp = requests.post(f'{LOCKS_URL}/api/v1/release', json={
'name': name,
})
if resp.status_code != 202:
raise Exception

View File

@@ -1,13 +1,6 @@
import os
import requests
import time
stage = os.getenv("STAGE", 'local')
if stage == 'local':
QUEUES_URL = 'http://localhost:1239'
else:
QUEUES_URL = 'http://queues:1239'
import tasks_pb2_grpc
import tasks_pb2
class QueuesException(Exception):
@@ -17,30 +10,20 @@ class QueuesException(Exception):
class TasksHandlerMixin:
def poll(self):
while True:
response = requests.get(f'{QUEUES_URL}/api/v1/take', headers={'queue': self.queue_name}).json()
task = response.get('task')
response: tasks_pb2.TakeResponse = self.stub.Take(tasks_pb2.TakeRequest(self.queue_name))
task: tasks_pb2.Task = response.task
if not task:
time.sleep(0.2)
continue
try:
self.before_execute(task)
self.process(task['payload'])
self.process(task.payload)
except Exception as exc:
print(f'Error processing message id={task["id"]}, payload={task["payload"]}, exc={exc}')
continue
try:
resp = requests.post(f'{QUEUES_URL}/api/v1/finish', json={'id': task['id']})
if resp.status_code != 202:
raise QueuesException
self.after_execute(task)
self.stub.Finish(tasks_pb2.FinishRequest(task.id))
except:
print(f'Failed to finish task id={task["id"]}')
def before_execute(self, task: dict):
pass
def after_execute(self, task: dict):
pass
print(f'Failed to finish task id={task.id}')
@property
def queue_name(self):
@@ -49,12 +32,12 @@ class TasksHandlerMixin:
def process(self, payload):
raise NotImplemented
def set_task(queue_name: str, payload: dict, seconds_to_execute: int, delay: int|None = None):
resp = requests.post(f'{QUEUES_URL}/api/v1/put', headers={'queue': queue_name}, json={
'payload': payload,
'seconds_to_execute': seconds_to_execute,
'delay': delay,
})
if resp.status_code != 202:
raise QueuesException
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
)
)