Python 如何在Gevent中的特定线程中锁定运行某些代码块?
简化的代码看起来像Python 如何在Gevent中的特定线程中锁定运行某些代码块?,python,gevent,Python,Gevent,简化的代码看起来像 import gevent from requests import get from gevent.monkey import patch_all; patch_all() def f1(): print("Thread 1 start") x = get('https://www.google.com') print("Thread 1 end") def f2(): print("Thread 2") gevent.joina
import gevent
from requests import get
from gevent.monkey import patch_all; patch_all()
def f1():
print("Thread 1 start")
x = get('https://www.google.com')
print("Thread 1 end")
def f2():
print("Thread 2")
gevent.joinall([
gevent.spawn(f1),
gevent.spawn(f2)
])
预计产量为:
线程1开始线程2
螺纹1端 我需要锁定get请求的调用。因此,我需要得到以下输出: 线程1开始
螺纹1端部
线程2
如何实现这样的get请求锁定?您应该这样做:
import gevent
from requests import get
from gevent.monkey import patch_all; patch_all()
from gevent.lock import Semaphore
sem = Semaphore()
def f1():
sem.acquire()
print("Thread 1 start")
gevent.sleep(0.1)
print("Thread 1 end")
sem.release()
def f2():
with sem:
print("Thread 2")
gevent.joinall([
gevent.spawn(f1),
gevent.spawn(f2)
])