Skip to content

Instantly share code, notes, and snippets.

@gibizer
Created September 2, 2022 16:32
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 gibizer/9051369e67fd46a20d52963dac534852 to your computer and use it in GitHub Desktop.
Save gibizer/9051369e67fd46a20d52963dac534852 to your computer and use it in GitHub Desktop.
import random
import time
import eventlet
from oslo_concurrency import lockutils
eventlet.monkey_patch()
LOCK = "my-lock"
WORKER_NAME = None
@lockutils.synchronized(name=LOCK, fair=True)
def locked_f(name):
global WORKER_NAME
if WORKER_NAME:
raise ValueError(f"{name}: I'm overlapping with {WORKER_NAME}")
WORKER_NAME = name
time.sleep(random.randint(0, 10) / 100)
WORKER_NAME = None
def do_work(name):
print('starting worker', name)
while True:
locked_f(name)
time.sleep(random.randint(0, 10) / 100)
print('.', end='')
def test():
for i in range(2):
# eventlet.spawn is OK
# eventlet.spawn(do_work, f"worker{i}")
# eventlet.spawn_n is NOT OK
# it is probably https://github.com/eventlet/eventlet/issues/731
eventlet.spawn_n(do_work, f"worker{i}")
time.sleep(10)
if __name__ == '__main__':
test()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment