I have a uvicorn + fast API server that serves a simple get request
<code>
@app.get("/")
def read_root():
return {"Hello": "World"}
async def main():
logger.info("Running")
config = uvicorn.Config(
"sagemaker.app:app",
host="127.0.0.1",
port=9007,
log_level="info",
loop="asyncio",
reload=True,
workers=3,
use_colors=True,
)
server = uvicorn.Server(config)
logger.info("I'm just waiting for a connection")
await server.serve()
</code>
<code>
@app.get("/")
def read_root():
return {"Hello": "World"}
async def main():
logger.info("Running")
config = uvicorn.Config(
"sagemaker.app:app",
host="127.0.0.1",
port=9007,
log_level="info",
loop="asyncio",
reload=True,
workers=3,
use_colors=True,
)
server = uvicorn.Server(config)
logger.info("I'm just waiting for a connection")
await server.serve()
</code>
@app.get("/")
def read_root():
return {"Hello": "World"}
async def main():
logger.info("Running")
config = uvicorn.Config(
"sagemaker.app:app",
host="127.0.0.1",
port=9007,
log_level="info",
loop="asyncio",
reload=True,
workers=3,
use_colors=True,
)
server = uvicorn.Server(config)
logger.info("I'm just waiting for a connection")
await server.serve()
In the same application im trying to check if the get request works
I start serving here
<code>
def _start_serving(self):
asyncio.create_task(main())
time.sleep(10)
</code>
<code>
def _start_serving(self):
asyncio.create_task(main())
time.sleep(10)
</code>
def _start_serving(self):
asyncio.create_task(main())
time.sleep(10)
in a different callback i try to ping the local host
<code> async def tcp_connect(self):
reader, writer = await asyncio.open_connection('127.0.0.1', 9007)
logger.debug(reader)
writer.write(b'GET / HTTP/1.1rnHost: 127.0.0.1:9007rnUser-Agent: python-requests/2.32.3rnAccept-Encoding: gzip, deflate, brrnAccept: */*rnConnection: keep-alivernrn')
logger.debug(writer.get_extra_info('peername'))
logger.debug(writer.transport)
data = await reader.readline()
logger.info(data)
writer.close()
await writer.wait_closed()
</code>
<code> async def tcp_connect(self):
reader, writer = await asyncio.open_connection('127.0.0.1', 9007)
logger.debug(reader)
writer.write(b'GET / HTTP/1.1rnHost: 127.0.0.1:9007rnUser-Agent: python-requests/2.32.3rnAccept-Encoding: gzip, deflate, brrnAccept: */*rnConnection: keep-alivernrn')
logger.debug(writer.get_extra_info('peername'))
logger.debug(writer.transport)
data = await reader.readline()
logger.info(data)
writer.close()
await writer.wait_closed()
</code>
async def tcp_connect(self):
reader, writer = await asyncio.open_connection('127.0.0.1', 9007)
logger.debug(reader)
writer.write(b'GET / HTTP/1.1rnHost: 127.0.0.1:9007rnUser-Agent: python-requests/2.32.3rnAccept-Encoding: gzip, deflate, brrnAccept: */*rnConnection: keep-alivernrn')
logger.debug(writer.get_extra_info('peername'))
logger.debug(writer.transport)
data = await reader.readline()
logger.info(data)
writer.close()
await writer.wait_closed()
In my notebook i am not able to read the response back from the server
<code>INFO:app:Running
WARNING: "workers" flag is ignored when reloading is enabled.
INFO:sagemaker.app:I'm just waiting for a connection
INFO: Started server process [90207]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:9007 (Press CTRL+C to quit)
ERROR:asyncio:Task was destroyed but it is pending!
task: <Task pending name='Task-9' coro=<InProcessMultiModelServer.tcp_connect() done, defined at wait_for=<Future pending cb=[Task.task_wakeup()]>>
INFO: 127.0.0.1:47876 - "GET / HTTP/1.1" 200 OK
</code>
<code>INFO:app:Running
WARNING: "workers" flag is ignored when reloading is enabled.
INFO:sagemaker.app:I'm just waiting for a connection
INFO: Started server process [90207]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:9007 (Press CTRL+C to quit)
ERROR:asyncio:Task was destroyed but it is pending!
task: <Task pending name='Task-9' coro=<InProcessMultiModelServer.tcp_connect() done, defined at wait_for=<Future pending cb=[Task.task_wakeup()]>>
INFO: 127.0.0.1:47876 - "GET / HTTP/1.1" 200 OK
</code>
INFO:app:Running
WARNING: "workers" flag is ignored when reloading is enabled.
INFO:sagemaker.app:I'm just waiting for a connection
INFO: Started server process [90207]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:9007 (Press CTRL+C to quit)
ERROR:asyncio:Task was destroyed but it is pending!
task: <Task pending name='Task-9' coro=<InProcessMultiModelServer.tcp_connect() done, defined at wait_for=<Future pending cb=[Task.task_wakeup()]>>
INFO: 127.0.0.1:47876 - "GET / HTTP/1.1" 200 OK
I do see this in the client logs
<code>
DEBUG: <StreamReader transport=<_SelectorSocketTransport fd=64 read=polling write=<idle, bufsize=0>>>
DEBUG: ('127.0.0.1', 9007)
DEBUG: <_SelectorSocketTransport fd=64 read=polling write=<idle, bufsize=0>>
</code>
<code>
DEBUG: <StreamReader transport=<_SelectorSocketTransport fd=64 read=polling write=<idle, bufsize=0>>>
DEBUG: ('127.0.0.1', 9007)
DEBUG: <_SelectorSocketTransport fd=64 read=polling write=<idle, bufsize=0>>
</code>
DEBUG: <StreamReader transport=<_SelectorSocketTransport fd=64 read=polling write=<idle, bufsize=0>>>
DEBUG: ('127.0.0.1', 9007)
DEBUG: <_SelectorSocketTransport fd=64 read=polling write=<idle, bufsize=0>>
Tried adding a strong reference.
<code> #background_tasks = set()
asyncio.create_task(self.tcp_connect())
#background_tasks.add(task)
#task.add_done_callback(background_tasks.discard)
</code>
<code> #background_tasks = set()
asyncio.create_task(self.tcp_connect())
#background_tasks.add(task)
#task.add_done_callback(background_tasks.discard)
</code>
#background_tasks = set()
asyncio.create_task(self.tcp_connect())
#background_tasks.add(task)
#task.add_done_callback(background_tasks.discard)