title: A blocked Python async function invocation also block another async function
body: <p>I use FastAPI to develope data layer APIs accessing SQL Server.
  No mater using pytds or pyodbc,
  if there is a database transaction caused any request hangs,
  all the other requests would be blocked. (even without database operation)</p>
  <p>Reproduce:</p>
  <ol>
  <li>Intentaionally do a serializable SQL Server session, begin a transaction and do not rollback or commit</li>
  </ol>
  <pre><code>    INSERT INTO [dbo].[KVStore] VALUES ('1', '1', 0)
      begin tran
      SET TRANSACTION ISOLATION LEVEL Serializable
      SELECT * FROM [dbo].[KVStore]
  </code></pre>
  <ol start="2">
  <li>Send a request to the API with async handler function like this:</li>
  </ol>
  <pre><code>    def kv_delete_by_key_2_sql():
              conn = pytds.connect(dsn='192.168.0.1', database=cfg.kvStore_db, user=cfg.kvStore_uid,
                                   password=cfg.kvStore_upwd, port=1435, autocommit=True)
              engine = conn.cursor()
              try:
                  sql = &quot;delete KVStore; commit&quot;
  
                  with concurrent.futures.ThreadPoolExecutor() as executor:
                      future = executor.submit(engine.execute, sql)
                      rs = future.result()
                      j = {
                          'success': True,
                          'rowcount': rs.rowcount
                      }
                      return jsonable_encoder(j)
              except Exception as exn:
                  j = {
                      'success': False,
                      'reason': exn_handle(exn)
                  }
                  return jsonable_encoder(j)
  
      @app.post(&quot;/kvStore/delete&quot;)
      async def kv_delete(request: Request, type_: Optional[str] = Query(None, max_length=50)):
          request_data = await request.json()
  
          return kv_delete_by_key_2_sql()
  
  </code></pre>
  <ol start="3">
  <li>And send a request to the API of the same app with async handler function like this:</li>
  </ol>
  <pre><code>
      async def hangit0(request: Request, t: int = Query(0)):
          print(t, datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
          await asyncio.sleep(t)
          print(t, datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
          j = {
              'success': True
          }
          return jsonable_encoder(j)
      
      @app.get(&quot;/kvStore/hangit/&quot;)
      async def hangit(request: Request, t: int = Query(0)):
          return await hangit0(request, t)
  
  </code></pre>
  <p>I expected step.2 would hang and step.3 should directly return after 2 seconds.
  However step.3 never return if the transaction doesn't commit or rollback...</p>
  <p>How do I make these handler functions work concurrently?</p>