簡體   English   中英

Python-如何同時運行兩個循環?

[英]Python - How to run two loops at the same time?

簡而言之,我希望不同的對象具有彼此獨立運行的自己的滴答循環代碼(因為一個滴答循環不會停止我的應用程序中的所有其他滴答循環)。

我創建了一個基本模塊,該模塊具有用於形狀的類以及用於生成形狀的主體,但是該類的滴答循環支撐了主要部件循環。

我什至嘗試將代碼分成兩個模塊,看看是否可行,但仍然分別運行兩個循環。

這是我的代碼:

(主要代碼)

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() 

粗略地說,有三種方法可以實現您想要的。 最好的方法很大程度上取決於您要對每個獨立單元進行的操作以及性能限制和要求。

第一種解決方案是有一個獨立的循環,該tick()在每次迭代時簡單地調用每個對象的tick()方法。 從概念上講,這也許是最簡單的實現。

其他兩個解決方案涉及多個線程或多個進程。 這些解決方案有時會帶來相當大的復雜性,但好處是您可以讓操作系統為每個對象安排tick()方法的運行。

我不明白您的代碼在做什么,但是我的建議是使用線程: https : //pymotw.com/2/threading/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM