Created
September 2, 2022 16:32
-
-
Save gibizer/9051369e67fd46a20d52963dac534852 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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