Python - 如何同时运行两个循环?

时间:2016-08-22 02:31:54

标签: python loops

所以简单地说我希望不同的对象让自己的滴答循环代码彼此独立运行(因为在一个滴答循环中不会停止我的应用程序中的所有其他滴答循环)。

我已经创建了一个基本模块,它有一个用于形状的类和用于生成它们的主体,但是该类的tick循环保持了主要部分循环。

我甚至尝试将代码拆分为两个模块,看看是否可行,但仍分别运行两个循环。

这是我的代码:

(主要代码)

from random import *
from tkinter import *
from time import *

import RdmCirClass

size = 500
window = Tk()
count = 0
d = 0
shapes = []

canv = Canvas(window, width=size, height=size)
canv.pack()
window.update()
while True:
    col = choice(['#EAEA00'])
    x0 = randint(0, size)
    y0 = randint(0, size)
    #d = randint(0, size/5)
    d = (d + 0.01)
    outline = 'white'
    shapes.append(1)
    shapes[count] = RdmCirClass.Shape("shape" + str(count), canv, col, x0, y0, d, outline)
    shapes[count].spawn()
    count = count+1

    print("Circle Count: ",count)
    window.update()

(形状类)

from random import *
from tkinter import *
from time import *   

class Shape(object):
    def __init__(self,name, canv, col, x, y,d,outline):
        self.name = name
        self.canv = canv
        self.col = col
        self.x = x
        self.y = y
        self.d = d
        self.outline = outline
        self.age=0
        self.born = time()

    def death(self):
        pass

    def tick(self):
        self.age = time() - self.born

    def spawn(self):
        self.canv.create_oval(self.x, self.y, self.x + self.d, self.y + self.d, outline=self.outline, fill = self.col)
        while True:
            self.tick() 

2 个答案:

答案 0 :(得分:1)

粗略地说,有三种方法可以达到你想要的效果。哪个最好取决于你对每个独立单元的确切考虑,以及你有哪些性能限制和要求。

第一个解决方案是拥有一个独立循环,在每次迭代时只调用每个对象的tick()方法。从概念上讲,这可能是最简单的实现方式。

另外两个解决方案涉及多个线程或多个进程。这些解决方案有时会相当复杂,但好处是您可以让操作系统为每个对象安排tick()方法的运行。

答案 1 :(得分:0)

我不明白你的代码在做什么,但我的建议是使用线程:https://pymotw.com/2/threading/