Tenho um serviço Python que usa threads virtuais do Python ( threading.Thread
) para lidar com solicitações. Há uma funcionalidade singleton compartilhada que todas as threads tentam acessar, protegida por threading.Lock
.
g_lock = threading.Lock()
def my_threaded_functionality():
try:
g_lock.acquire()
# ... Do something with a shared resource ...
finally:
g_lock.release()
Nos documentos de threading.Lock.acquire
, não há menção à justiça , enquanto que, no de asyncio asyncio.Lock.acquire
, eles mencionam que o bloqueio é justo.
Como quero evitar a inanição de threads e preservar a ordem das tarefas como elas chegaram, eu optaria pelo asyncio
Lock de 's se eles não mencionassem que os bloqueios não são seguros para threads. A questão é se isso também deveria ser um problema com as "threads" virtuais do Python.