java – Python – 线程,计时或函数使用?

我正在制定一个关于如何解决这个问题的想法.请帮忙.

我的项目包含一个N x N网格,其中包含一系列块,这些块应该在随机方向和随机速度内移动(每隔0.1秒,块的位置用速度更新).我有三个“特殊”块,预计会有各自的移动功能.我将有其他块(其中许多)除了更新它们的位置之外什么都不做,并确保它们保留在网格中.

现在这三个块具有超出移动的功能,但是每个块都单独运行,等待另一个块的特殊功能完成(块2将在块1上等待,块3将等待2并将其设置回块1等.这个排序队列将在运动发生时运行.我希望议案永不停止.在每个块的非移动函数运行n次后,代码完成.

我的问题是:我应该使用线程来启动和停止非移动函数,还是有一种方法可以设置一个时间并设置在.1秒后可以使用类函数的布尔值来连续移动对象(显然循环遍历),然后使用计数一起结束程序?如果是这样,你将如何在Python中编写main函数?对于所有这一切,有人认为Java在运行时会比Python快得多,特别是在将数据写入.txt文件时吗?

最佳答案 您最好的选择可能是在单个更新函数中同时处理所有这些,而不是尝试使用线程.这主要是因为Global Interpreter Lock将阻止多个线程同时处理.你之后的是这样的:

def tick():
  for box in randomBoxes:
    box.relocate()

  specialBlock1.relocate()

  specialBlock2.relocate()

  specialBlock3.relocate()

然后我们定义第二个函数,它将无限期地运行我们的第一个函数:

def worker():
  while True:
    tick()

    sleep(0.1)

现在我们有一个间隔或排序,我们将启动一个在后台运行并处理我们的显示更新的线程.

from threading import Thread

t = Thread(target = worker, name = "Grid Worker")

t.daemon = True # Useful when this thread is not the main thread.

t.start()

在我们的tick()函数中,我们已经满足了specialBlocks 1,2和3按设定顺序工作的要求.其他箱子各自采取行动,不管其他人做什么.

点赞