Я пытаюсь выполнить несколько одновременных нисходящих запросов, используя gevent в моем приложении фляги.
У меня есть:
import gevent
from gevent import monkey
monkey.patch_all(thread=False)
from flask import Flask, request, g
app = Flask(__name__, static_folder='static')
и следующий код:
def f1(self):
@copy_current_request_context
def _test(t):
time.sleep(t)
r = requests.get(
'https://webhook.site/d14a41a6-9c6a-4da0-bbe6-3cc660daea3d', params=dict(word='test')
)
return r.status_code
jobs = [gevent.spawn(_test, 5), gevent.spawn(_test, 10)]
results = [job.value for job in gevent.joinall(jobs)]
return None
Если второй _test занимает больше времени, чем первый, я получаю ошибку контекста Popped неправильное приложение.
Если я добавлю другой метод, например:
@copy_current_request_context
def _test_bis(t):
from random import randint
time.sleep(t)
r = requests.get(
'https://webhook.site/d14a41a6-9c6a-4da0-bbe6-3cc660daea3d', params=dict(word='test')
)
return r.status_code
и использовать его следующим образом:
jobs = [gevent.spawn(_test_bis, 5), gevent.spawn(_test, 10)]
У меня нет ошибок.
Есть идеи, как мне обойти эту проблему?