2 years ago
#270377
Scottie
ThreadPoolExecutor is not monkey-patched to the Gevent's one
I want to execute some long-lived tasks asynchronously by submitting them into a thread pool.
However, gevent's monkey patching does not do the trick for from concurrent.futures import ThreadPoolExecutor. (It should replace the built-in thread pool to gevent.threadpool.ThreadPoolExecutor)
Here is my main.py:
from concurrent.futures import ThreadPoolExecutor
# from gevent.threadpool import ThreadPoolExecutor
from flask import Flask
app = Flask("playground")
@app.route("/test")
def test_route():
    ThreadPoolExecutor().submit(is_prime, 2147483647)
    return "ok"
def is_prime(n):
    for i in range(2, n):
        if n % i == 0:
            print(f"{n} is NOT a prime number")
            return
    print(f"{n} is a prime number!!")
- Run the application by gunicorn --timeout=5 --worker-class=gevent main:app
- Trigger the API by curl localhost:8000/test
My is-prime job will be interrupted due to gevent worker timeout (5 seconds).
Everything will be fine when I uncomment the second line.
Am I missing something with the gevent's monkey patching? Thanks for any suggestions.
python
flask
threadpool
gevent
monkeypatching
0 Answers
Your Answer