与Python一起使用多播时的高CPU使用率

时间:2012-12-12 08:32:49

标签: python performance network-programming

我正在编写一个小型多协议图像流服务器(在Python中),所有协议都运行良好,除了使我的CPU使用率高达150%的多播协议!

这是多播代码:

       delay = 1./self.flux.ips
    imgid = 0
    lastSent = 0

    while self.connected:

        #self.printLog("Getting ready to fragment {}".format(imgid))
        fragments = fragmentImage(self.flux.imageFiles[imgid], self.fragmentSize)
        #self.printLog("Fragmented {} ! ".format(imgid))

        # Checking if the delay has passed, to respected the framerate
        while (time.time() - lastSent) < delay:
            pass

        # Sending the fragments
        for fragmentid in range(len(fragments)):
            formatedFragment = formatFragment(fragments[fragmentid], fragmentid*self.fragmentSize, len(self.flux.imageFiles[imgid]), imgid)
            self.sendto(formatedFragment, (self.groupAddress, self.groupPort))

        lastSent = time.time()

        imgid = (imgid + 1) % len(self.flux.images)

UDP协议也将图像作为片段发送,我没有任何CPU使用问题。 请注意,客户端也有一些延迟来获取这些图像。

1 个答案:

答案 0 :(得分:2)

使用time.sleep(delay)而不是(繁重)忙碌等待,你应该很好(请参阅此问题Python: Pass or Sleep for long running processes?)。

为了获得更好的性能,您应该考虑像PyUVgeventtornadotwisted这样的I / O事件反应器。