Skip to content

Instantly share code, notes, and snippets.

@Ladsgroup
Created August 17, 2018 19:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ladsgroup/fd6b14fbabd6693a140a88fcfff8772d to your computer and use it in GitHub Desktop.
Save Ladsgroup/fd6b14fbabd6693a140a88fcfff8772d to your computer and use it in GitHub Desktop.
PoolCounter
#!/usr/bin/python
# -*- coding: utf-8 -*-
# PoolCounter client
# License: MIT
# Based on https://github.com/wikimedia/operations-debs-python-thumbor-wikimedia/blob/master/wikimedia_thumbor/poolcounter/__init__.py
import socket
import logging
import time
class PoolCounter:
def __init__(self):
self.server = 'localhost'
self.port = 7531
self.stream = None
self.logger = logging.getLogger('poolcounter')
def connect(self):
self.debug('[PoolCounter] Connecting to: %s %d' % (self.server, self.port))
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
self.stream = s
return self.stream.connect((self.server, self.port))
def acq4me(self, key, workers, maxqueue, timeout):
if not self.stream:
self.connect()
try:
self.debug('[PoolCounter] ACQ4ME %s %d %d %d' % (key, workers, maxqueue, timeout))
self.stream.send(bytes('ACQ4ME %s %d %d %d\n' % (key, workers, maxqueue, timeout), 'utf-8'))
data = self.stream.recv(4096).decode('utf-8')
print(data)
except socket.error as e:
self.stream = None
raise e
return data == 'LOCKED\n'
def release(self, key):
if not self.stream:
self.connect()
try:
self.debug('[PoolCounter] RELEASE')
self.stream.send(bytes('RELEASE %s\n' % key, 'utf-8'))
data = self.stream.recv(4096).decode('utf-8')
except socket.error as e:
self.stream = None
raise e
return data == 'RELEASED\n'
def close(self):
if self.stream:
self.debug('[PoolCounter] Disconnecting')
self.stream.close()
self.stream = None
return True
else:
self.debug('[PoolCounter] Already disconnected')
return False
def debug(self, message):
self.logger.debug(message)
poolcounter = PoolCounter()
for i in range(15):
print(i)
print(poolcounter.acq4me('wtf', 3, 7, 5))
#poolcounter.release('wtf')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment