我正在制定一个关于如何解决这个问题的想法.请帮忙.
我的项目包含一个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按设定顺序工作的要求.其他箱子各自采取行动,不管其他人做什么.
标签:python,java,multithreading,timing
来源: https://codeday.me/bug/20190704/1380853.html