Python 将udp m2tp单播流代理到流式sanic.response时CPU使用率差异很大

Python 将udp m2tp单播流代理到流式sanic.response时CPU使用率差异很大,python,udp,streaming,python-asyncio,sanic,Python,Udp,Streaming,Python Asyncio,Sanic,我开发了一个代理,它允许我通过http将ISP提供的视频作为udp单播m2tp流使用。为此,我使用python、asyncio和Sanic 它工作得很好,但有些事情我无法解释。一些流使用不到一个cpu核心(i7-3770)的8%,而其他特定流则消耗多达30%。所有流原则上都是相同的,我不对它们进行任何处理,只是从udp套接字读取数据,然后写入流式sanic.Response,基本上是这样的: import asyncio_dgram import socket from contextlib

我开发了一个代理,它允许我通过http将ISP提供的视频作为udp单播m2tp流使用。为此,我使用python、asyncio和Sanic

它工作得很好,但有些事情我无法解释。一些流使用不到一个cpu核心(i7-3770)的8%,而其他特定流则消耗多达30%。所有流原则上都是相同的,我不对它们进行任何处理,只是从udp套接字读取数据,然后写入流式
sanic.Response
,基本上是这样的:

import asyncio_dgram
import socket

from contextlib import closing
from Sanic import Sanic, response

app = Sanic()

MIME = 'video/MP2T'

@app.get('/some/url')
async def handle_url(request):
    host = socket.gethostbyname(socket.gethostname())
    client_port = 43545
    async def my_streaming_fn(response):
        with closing(await asyncio_dgram.bind((host, client_port))) as stream:
            while True:
                data, remote_addr = await stream.recv()
                await response.write(data)

    return response.stream(my_streaming_fn, content_type=MIME)
所有流都到达一个单独的vlan,所有ts数据包都是1344字节(1316字节,不带报头)。我看到了相同比特率的流的区别,即使来自相同的原始电视频道


我缺少什么可以解释某些流和其他流之间cpu使用的巨大差异?有什么想法吗?

次要的一点,但我认为您应该能够使用
bind(('',client\u port))
而不是绑定到任何特定的地址。有几个问题:1。你们的包价是多少?2.您是否可以编写一些代码来模拟(m2tp)发送方引发这种行为?