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)
])