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

I want to parallel program in python with my pygame function and internet use

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

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 中完成,但我不确定如何做,也不知道在我的代码中是什么类型的并行以及在何处实现它。

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

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

请注意,connect()(这可能是 Python 在下面使用的;BSD 套接字之类的)将进行自己的网络工作。众所周知,互联网通信的速度是有物理极限的。您的计算机比慢速或一般的连接速度快数英里。

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

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

如果您真的需要在每一帧都创建一个套接字,请在主线程之外进行。 我确定 Python 有多线程库。我建议您不要走这条路,因为共享内存可能非常复杂。网络和共享内存一起将被证明是一个令人头疼的问题。

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