Browse Source

[Python] Bump emmett to 2.5 (#8054)

Giovanni Barillari 2 years ago
parent
commit
3f0e02db2c

+ 0 - 45
frameworks/Python/emmett/app-socketify-asgi.py

@@ -1,45 +0,0 @@
-import os
-import multiprocessing
-import logging
-from socketify import ASGI
-from emmett import App
-from emmett.tools import service
-
-app = App(__name__)
-
-
-app.config.handle_static = False
-
[email protected]()
[email protected]
-async def json():
-    return {'message': 'Hello, World!'}
-
[email protected](output='bytes')
-async def plaintext():
-    return b'Hello, World!'
-
-
-
-_is_travis = os.environ.get('TRAVIS') == 'true'
-
-workers = int(multiprocessing.cpu_count())
-if _is_travis:
-    workers = 2
-
-def run_app():
-    ASGI(app).listen(8080, lambda config: logging.info(f"Listening on port http://localhost:{config.port} now\n")).run()
-
-
-def create_fork():
-    n = os.fork()
-    # n greater than 0 means parent process
-    if not n > 0:
-        run_app()
-
-
-# fork limiting the cpu count - 1
-for i in range(1, workers):
-    create_fork()
-
-run_app()  # run app on the main process too :)

+ 13 - 12
frameworks/Python/emmett/app.py

@@ -1,6 +1,5 @@
 
-from functools import partial
-from random import randint
+from random import randint, sample
 
 from emmett import App, request
 from emmett.orm import Database, Model, Field, rowmethod
@@ -67,16 +66,17 @@ def get_qparam():
 @service.json
 async def get_random_worlds():
     num_queries = get_qparam()
-    worlds = [
-        World.get(randint(1, 10000)).serialize() for _ in range(num_queries)]
+    row_ids = sample(range(1, 10000), num_queries)
+    worlds = [World.get(row_id).serialize() for row_id in row_ids]
     return worlds
 
 
 @app.route(pipeline=[db.pipe], output='template')
 async def fortunes():
+    fortune = Fortune.new(message="Additional fortune added at request time.")
+    fortune.id = 0
     fortunes = Fortune.all().select()
-    fortunes.append(
-        Fortune.new(id=0, message="Additional fortune added at request time."))
+    fortunes.append(fortune)
     fortunes.sort(lambda m: m.message)
     return {'fortunes': fortunes}
 
@@ -85,13 +85,14 @@ async def fortunes():
 @service.json
 async def updates():
     num_queries = get_qparam()
+    updates = list(zip(
+        sample(range(1, 10000), num_queries),
+        sorted(sample(range(1, 10000), num_queries))
+    ))
     worlds = []
-    rp = partial(randint, 1, 10000)
-    ids = [rp() for _ in range(num_queries)]
-    ids.sort()  # To avoid deadlock
-    for id in ids:
-        world = World.get(id)
-        world.update_record(randomnumber=rp())
+    for row_id, number in updates:
+        world = World.get(row_id)
+        world.update_record(randomnumber=number)
         worlds.append(world.serialize())
     return worlds
 

+ 0 - 38
frameworks/Python/emmett/benchmark_config.json

@@ -22,44 +22,6 @@
       "display_name": "Emmett",
       "notes": "CPython 3.7",
       "versus": "uvicorn"
-    },
-    "socketify-asgi": {
-      "json_url": "/json",
-      "plaintext_url": "/plaintext",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "Postgres",
-      "framework": "Emmett",
-      "language": "Python",
-      "flavor": "Python3",
-      "orm": "Full",
-      "platform": "None",
-      "webserver": "Socketify.py",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "Emmett [Socketify.py ASGI]",
-      "notes": "CPython 3.7",
-      "versus": "uvicorn"
-    },
-    "socketify-asgi-pypy": {
-      "json_url": "/json",
-      "plaintext_url": "/plaintext",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "Postgres",
-      "framework": "Emmett",
-      "language": "Python",
-      "flavor": "PyPy3",
-      "orm": "Full",
-      "platform": "None",
-      "webserver": "Socketify.py",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "Emmett [Socketify.py ASGI PyPy3]",
-      "notes": "",
-      "versus": "uvicorn"
     }
   }]
 }

+ 0 - 26
frameworks/Python/emmett/config.toml

@@ -17,29 +17,3 @@ orm = "Full"
 platform = "None"
 webserver = "None"
 versus = "uvicorn"
-
-[socketify-asgi]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
-approach = "Realistic"
-classification = "Fullstack"
-database = "Postgres"
-database_os = "Linux"
-os = "Linux"
-orm = "Full"
-platform = "None"
-webserver = "Socketify.py"
-versus = "uvicorn"
-
-[socketify-asgi-pypy]
-urls.plaintext = "/plaintext"
-urls.json = "/json"
-approach = "Realistic"
-classification = "Fullstack"
-database = "Postgres"
-database_os = "Linux"
-os = "Linux"
-orm = "Full"
-platform = "None"
-webserver = "Socketify.py"
-versus = "uvicorn"

+ 0 - 14
frameworks/Python/emmett/emmett-socketify-asgi-pypy.dockerfile

@@ -1,14 +0,0 @@
-FROM pypy:3.9-bullseye
-
-RUN mkdir -p /usr/src/app
-WORKDIR /usr/src/app
-COPY requirements-socketify.txt /usr/src/app
-RUN apt-get update; apt-get install libuv1 -y
-RUN pip install --no-cache-dir -r /usr/src/app/requirements-socketify.txt
-
-COPY ./ /app
-WORKDIR /app
-
-EXPOSE 8080
-
-CMD python ./app-socketify-asgi.py

+ 0 - 14
frameworks/Python/emmett/emmett-socketify-asgi.dockerfile

@@ -1,14 +0,0 @@
-FROM python:3.10-bullseye
-
-RUN mkdir -p /usr/src/app
-WORKDIR /usr/src/app
-COPY requirements-socketify.txt /usr/src/app
-RUN apt-get update; apt-get install libuv1 -y
-RUN pip install --no-cache-dir -r /usr/src/app/requirements-socketify.txt
-
-COPY ./ /app
-WORKDIR /app
-
-EXPOSE 8080
-
-CMD python ./app-socketify-asgi.py

+ 6 - 8
frameworks/Python/emmett/emmett.dockerfile

@@ -1,13 +1,11 @@
-FROM python:3.8
+FROM python:3.10-slim
 
-RUN mkdir -p /usr/src/app
-WORKDIR /usr/src/app
-COPY requirements.txt /usr/src/app
-RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt
+ADD ./ /emmett
 
-COPY ./ /app
-WORKDIR /app
+WORKDIR /emmett
+
+RUN pip install --no-cache-dir -r /emmett/requirements.txt
 
 EXPOSE 8080
 
-CMD [ "gunicorn", "app:app" , "-k", "emmett.asgi.workers.EmmettWorker", "-c", "gunicorn_conf.py" ]
+CMD python run.py

+ 0 - 14
frameworks/Python/emmett/gunicorn_conf.py

@@ -1,14 +0,0 @@
-import multiprocessing
-import os
-
-_is_travis = os.environ.get('TRAVIS') == 'true'
-
-workers = multiprocessing.cpu_count()
-if _is_travis:
-    workers = 2
-
-bind = "0.0.0.0:8080"
-keepalive = 120
-errorlog = '-'
-pidfile = '/tmp/emmett.pid'
-loglevel = 'error'

+ 0 - 2
frameworks/Python/emmett/requirements-socketify.txt

@@ -1,2 +0,0 @@
-emmett==2.2.0
-git+https://github.com/cirospaciari/socketify.py.git@main#socketify

+ 2 - 3
frameworks/Python/emmett/requirements.txt

@@ -1,3 +1,2 @@
-emmett[orjson]==2.2.0
-psycopg2-binary==2.8.6
-gunicorn==20.0.4
+emmett[orjson]>=2.5.0,<2.6.0
+psycopg2-binary==2.9.5

+ 18 - 0
frameworks/Python/emmett/run.py

@@ -0,0 +1,18 @@
+import multiprocessing
+
+from emmett.server import run
+
+
+if __name__ == "__main__":
+    cpus = multiprocessing.cpu_count()
+
+    run(
+        "rsgi",
+        ("app", "app"),
+        host="0.0.0.0",
+        port=8080,
+        workers=cpus // 2,
+        backlog=2048,
+        enable_websockets=False,
+        log_level="warn"
+    )