我想用pygame函数和互联网使用python中的并行程序

时间:2016-02-19 07:38:29

标签: python parallel-processing pygame multiprocessing urllib

我正在制作游戏,我将它连接到互联网。我使用以下代码检查互联网连接:

def is_connected():
  try:
    host = socket.gethostbyname("www.google.co.in")
    s = socket.create_connection((host, 80), 2)
    return True
  except:
    pass
  return False

当我在我的程序中执行此代码时,所以必须在一秒钟内运行60次的循环(因为我用60点击我的fpsclock)将我的fps减慢到5 fps。我认为 因为它太滞后了。 我知道这是因为这个程序在游戏循环中执行,每次更新我的屏幕时都必须运行 但是,任何人都可以为我提供替代方案。

我听说过并行编程这个术语,它可以在python中完成,但我不知道如何做到这一点,或者在我的代码中实现它的类型和位置。

2 个答案:

答案 0 :(得分:0)

将检查连接的碎片分解为重复性较小的时间间隔,或者将其放入自己的线程或任务中。或者更好的是,不要这样做。

传统上,对网络和套接字的调用由操作系统管理。这意味着操作系统需要管理自己的东西并尝试连接到主机,然后通过此处提供的代码在此处创建每帧连接。

请注意connect()(这可能是Python在下面使用的; BSD套接字和排序)将会做自己的网络工作。众所周知,互联网通信的速度有实际限制。您的计算机比缓慢或平庸的连接快几英里。

在我看来,最好的办法是发送数据报或建立连接。在C中,在BSD套接字下使用C函数{{1}的TCP / IP连接只有在连接关闭时才会返回0。通常,除非发生错误或连接关闭,否则连接将在TCP / IP下保持打开状态。

您没有理由每帧都要创建一个新的套接字。 TCP / IP连接流一旦创建就会保持打开状态。 UDP数据报只是一个数据包,就像从枪中射出的子弹。您需要继续建立连接的想法从一开始就存在缺陷,因为连接不是流,而是由协议管理(通常)数据包流,使其看起来像流一样。

如果你真的需要每帧继续创建一个套接字,那就在主线程之外做。我确信Python有多线程库。我建议你不要走这条路,因为共享内存可能非常复杂。网络和共享内存将成为一个令人头疼的问题。

答案 1 :(得分:0)

在这种情况下,您不需要多处理。你甚至不需要经常检查连接。每5秒一次就足够了,可能不会产生明显的差异。