Flask,ThreadPoolExecutor und asyncio

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo,

ich habe ein Script geschrieben, das mir mit hilfe von ThreadPoolExecutor und asyncio parallel abfragen von einer Api via http aufruft und auch auf Kommandozeilen ebene mit helm daten von Deployments einsammelt. Dieses Script funktioniert auf der Kommandzeile ganz gut und es wird die erwartet Datenstruktur geliefert. Nun wollte ich das ganze auch im Flaskumfeld verwenden und beim Aufruf der Funktion quittiert mir die Anwendung den Aufruf den Fehler:

Code: Alles auswählen

FLASK_APP = app.py
FLASK_ENV = development
FLASK_DEBUG = 0
In folder C:/Users/niesel/Documents/Services/projekt/datacollector/repos/datacollector/infra/docker/datacollector-versions-monitor-parallel
C:\Users\niesel\AppData\Local\Programs\Python\Python36\python.exe -m flask run
 * Serving Flask app "app.py"
 * Environment: development
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
[2020-07-24 13:52:42,431] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "C:\Users\niesel\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\niesel\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\niesel\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\niesel\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "C:\Users\niesel\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\niesel\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\niesel\Documents\Services\projekt\datacollector\repos\datacollector\infra\docker\datacollector-versions-monitor-parallel\app.py", line 10, in hello_world
    engine.get_versions_data()
  File "C:\Users\niesel\Documents\Services\projekt\datacollector\repos\datacollector\infra\docker\datacollector-versions-monitor-parallel\data_operations\data_operations.py", line 245, in get_versions_data
    actuator_dict = {"prod": engine.get_actuator_versions(config_json, "prod"),
  File "C:\Users\niesel\Documents\Services\projekt\datacollector\repos\datacollector\infra\docker\datacollector-versions-monitor-parallel\data_operations\data_operations.py", line 216, in get_actuator_versions
    loop = asyncio.get_event_loop()
  File "C:\Users\niesel\AppData\Local\Programs\Python\Python36\lib\asyncio\events.py", line 694, in get_event_loop
    return get_event_loop_policy().get_event_loop()
  File "C:\Users\niesel\AppData\Local\Programs\Python\Python36\lib\asyncio\events.py", line 602, in get_event_loop
    % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Thread-1'.
127.0.0.1 - - [24/Jul/2020 13:52:42] "GET / HTTP/1.1" 500 -

Bevor ich nun aber meine Codefragmente hier in den Thread Pumpe, wollte ich fragen, ob es generell was zu beachten gibt bei Flask und diesen beiden Bibliotheken.

VG niesel
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Flask hat seinen Eventloop und asyncio hat auch einen. Du brauchst einen, der beides kann. Und mit Threads wird es natürlich noch komplizierter.
Antworten