gpt4 book ai didi

java - Python - 线程、时序或函数使用?

转载 作者:搜寻专家 更新时间:2023-11-01 03:28:46 24 4
gpt4 key购买 nike

我在构思如何解决这个问题时遇到了问题。请帮忙。

我的项目由一个 N x N 网格和一系列 block 组成,这些 block 应该在该网格内以随机方向和随机速度移动(每 .1 秒, block 的位置随速度更新一次)。我有三个“特殊” block ,预计它们具有单独的运动功能。我会让其他 block (其中许多 block )只更新它们的位置,并确保它们保留在网格中。

现在这三个 block 的功能超出了移动,但是它们中的每一个都单独运行,等待另一个 block 的特殊功能完成( block 2 将等待 block 1, block 3 将等待 2 并将其设置回 block 1 , 等等)这个队列将在运动发生时运行。我希望运动永不停止。每个 block 的非移动函数运行n次后,代码结束。

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

最佳答案

您最好的选择可能是在一个更新函数中同时处理所有这些,而不是尝试使用线程。这主要是因为全局解释器锁无论如何都会阻止多个线程并发处理。那么你想要的是这样的:

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() 函数中,我们已经满足特殊 block 1、2 和 3 按设定顺序工作的要求。其他盒子各自采取行动,而不管其他盒子做什么。

关于java - Python - 线程、时序或函数使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6207985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com