Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Python-线程、计时还是函数使用?_Java_Python_Multithreading_Timing - Fatal编程技术网

Java Python-线程、计时还是函数使用?

Java Python-线程、计时还是函数使用?,java,python,multithreading,timing,Java,Python,Multithreading,Timing,我对如何解决这个问题有一个想法。请帮忙 我的项目由一个nxn网格和一系列块组成,这些块应该在这个网格内以随机方向和随机速度移动(每隔.1秒,块的位置会随速度更新)。我有三个“特殊”的块,预计有单独的运动功能。我将让其他块(其中许多块)什么也不做,只是更新它们的位置,并确保它们保持在网格中 现在,这三个块的功能超出了移动范围,但每个块都单独运行,等待另一个块的特殊功能完成(块2将在块1上等待,块3将在块2上等待,并将其设置回块1,等等)。当运动发生时,此排序队列将运行。我希望议案永不停止。每个块的

我对如何解决这个问题有一个想法。请帮忙

我的项目由一个nxn网格和一系列块组成,这些块应该在这个网格内以随机方向和随机速度移动(每隔.1秒,块的位置会随速度更新)。我有三个“特殊”的块,预计有单独的运动功能。我将让其他块(其中许多块)什么也不做,只是更新它们的位置,并确保它们保持在网格中

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


我的问题是:我应该使用线程来启动和停止非移动函数,还是有办法只设置一个时间并设置布尔值,可以在.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()
函数中,我们处理了特殊块1、2和3按设定顺序工作的需求。其他框都会执行它们的操作,而不管其他框执行什么操作。

如果将对特殊函数的调用放在一个函数中,则可以免费获得()

def run(n, blocks):
    for i in range(n):
        for b in blocks:
            b.special()

至于Python相对于Java的速度,这取决于很多事情,比如确切的实现。信息太少,无话可说。

您想在特殊功能和运动之间,或者(换句话说)在特殊功能和世界时钟之间实现某种同步吗?模拟步骤应该是实时的还是模拟的?世界时间是一切的基础。这些函数实际上是指当前时间的位置,因此,它们需要与时间本身同步。一切都是直接相关的,当函数发生时,位置也在不断变化。还有每一个,那不应该是日期,而是数据,对不起。真实时间和模拟时间呢?我想要一个0的计时器,从0开始,然后上升。每10秒,其中一个特殊的盒子将执行其非移动功能。首先A,然后A停止,然后B,B停止,然后C,然后回到A。这些特殊功能都是在运动发生的同时发生的,这些特殊的运动功能。它会迭代吗?我想这是可行的,但是当这一切发生的时候,同步运动又如何呢?我的意思是,我最多只能在给定的时间通过列表访问。因此,时间复杂度最多是线性的。我担心的是,如果我有150个虚拟块和3个特殊块,同时更新移动、访问数据并将其写入文件,它会使python过载,还是会在使用Java时看到明显的不同?嗯,我喜欢它。你到底要如何为此写一篇文章?def tick会是它自己的方法吗?所以,我会启动计时器,有一个while循环来停止整个过程,调用tick()(我不需要每隔.1秒,我不知道python可以实时不断地更新),然后只编写我的主函数?如果你能写一个例子线程,将不胜感激。很抱歉给您带来困惑。@TheChes44-不用担心,很乐意帮忙。我添加了一些额外的代码来演示如何使用线程将while循环移动到后台。我经常使用这种方法来监控事情——“每隔一段时间检查一下这项服务的状态,确保它是在线的,如果不是,通知别人。”很酷。谢谢那么非运动函数呢,它在方程中的位置呢?更好的问题是,我现在可以把主函数放在它下面吗?另外,这是Python3.2的正确格式吗?这就是我将要编写它的版本。我想让你知道你的代码工作得很好,谢谢你的帮助