| Create server.py: | |
| from starlette.applications import Starlette | |
| from starlette.responses import JSONResponse | |
| from starlette.routing import Route | |
| from transformers import pipeline | |
| import asyncio | |
| async def homepage(request): | |
| payload = await request.body() | |
| string = payload.decode("utf-8") | |
| response_q = asyncio.Queue() | |
| await request.app.model_queue.put((string, response_q)) | |
| output = await response_q.get() | |
| return JSONResponse(output) | |
| async def server_loop(q): | |
| pipe = pipeline(model="google-bert/bert-base-uncased") | |
| while True: | |
| (string, response_q) = await q.get() | |
| out = pipe(string) | |
| await response_q.put(out) | |
| app = Starlette( | |
| routes=[ | |
| Route("/", homepage, methods=["POST"]), | |
| ], | |
| ) | |
| @app.on_event("startup") | |
| async def startup_event(): | |
| q = asyncio.Queue() | |
| app.model_queue = q | |
| asyncio.create_task(server_loop(q)) | |
| Now you can start it with: | |
| uvicorn server:app | |
| And you can query it: | |
| ```bash | |
| curl -X POST -d "test [MASK]" http://localhost:8000/ | |
| [{"score":0.7742936015129089,"token":1012,"token_str":".","sequence":"test. |