2013-12-21 69 views
3

我的程序分爲兩個函數。一旦獲得一堆彈跳球的數據,位置和顏色。另一個吸引這些球並使它們移動。我想要做的是讓一個球每五秒鐘出現一次。爲了做到這一點,我必須在data()函數中使用time.sleep(),但不要使用move()函數。由於這兩者緊密相連,我無法弄清楚如何做到這一點。我認爲唯一的辦法是完全機會我的程序的邏輯(我不想這麼做),或者使移動()函數不知何故對time.sleep()沒有影響。有任何想法嗎?如何使某些東西不受time.sleep()python

的getData()函數:移動的

def getData(numobjects): 
    for x in range(int(numobjects)): 


    xCoordinate.append(random.randint(-300, 300)) 
    yCoordinate.append(random.randint(-300, 300)) 

    speed1.append(random.randrange(-8,8)) 
    speed2.append(random.randrange(-8,8)) 

    for i in range(len(speed1)): 
     for char in range(len(speed2)): 
      if i == 0 or char == 0: 
       i = random.randint(-8,8) 
       char = random.randint(-8,8) 

    color.append([random.random(), random.random(), random.random()]) 

部分()函數

# Clearing the canvas and hiding the turtle for the next iteration of moving() 
turtle.clear() 
turtle.hideturtle() 

# Drawing all of the circles 
for i in range(len(xCoordinate)): 
    turtle.penup() 
    turtle.goto(xCoordinate[i], yCoordinate[i]) 
    turtle.pendown() 
    turtle.fillcolor(color[i][0], color[i][1], color[i][2]) 
    turtle.begin_fill() 
    turtle.circle(15)   
    turtle.end_fill() 
    xCoordinate[i] += speed1[i] 
    yCoordinate[i] += speed2[i] 
# Bouncing off edges of the screen 
    if xCoordinate[i] > 300: 
     xCoordinate[i] = 299 
     speed1[i] *= -1 
    if xCoordinate[i] < -300: 
     xCoordinate[i] = -299 
     speed1[i] *= -1   
    if yCoordinate[i] > 300: 
     yCoordinate[i] = 299 
     speed2[i] *= -1 
    if yCoordinate[i] < -300: 
     yCoordinate[i] = -299 
     speed2[i] *= -1 

# updating turtle and running the moving() function every ten milliseconds 
turtle.update() 
turtle.ontimer(moving, 10) 
+1

你可以嘗試使用'threading'庫來使它們作爲不同的線程連續運行。 –

+0

我很抱歉。我很新的堆棧溢出,所以我沒有意識到我需要發佈我的代碼。但是,這兩個函數的代碼特別是大約200行。我應該全部發布嗎? –

+0

你的線程已被擱置,因爲它實際上並沒有主題,所以用代碼示例和一些更多的描述來重寫你的原始文章。您應該只發布代碼的相關部分。 –

回答

1

而不是用球之間time.sleep(),爲什麼不跟蹤的經過時間?

start = time.time() 
INTERVAL = 5 
while True: 
    if time.time() >= start + INTERVAL: 
     # release new ball 
     start = time.time() 
    # deal with movements 

或者,你將不得不使用multiprocessingthreading來分隔功能。

+0

當我嘗試實現這個時,會發生一些非常奇怪的事情:RuntimeError:超出最大遞歸深度。此外,我得到一個窗口錯誤信息,說python已停止工作。這兩個函數都不是遞歸的。我沒有看到這些錯誤的合理原因。如果你有任何想法,爲什麼發生這種情況,請留在評論部分。 –

+0

不,如果你的功能真的不遞歸,我不明白爲什麼會發生 – jonrsharpe

-1

你可以使用線程庫來做到這一點。例如,您可以在這裏使用time.sleep()方法看到一個很好的例子:http://www.tutorialspoint.com/python/python_multithreading.htm

#!/usr/bin/python 

import thread 
import time 

# Define a function for the thread 
def print_time(threadName, delay): 
    count = 0 
    while count < 5: 
     time.sleep(delay) 
     count += 1 
     print "%s: %s" % (threadName, time.ctime(time.time())) 

# Create two threads as follows 
try: 
    thread.start_new_thread(print_time, ("Thread-1", 2,)) 
    thread.start_new_thread(print_time, ("Thread-2", 4,)) 
except: 
    print "Error: unable to start thread" 

的想法是,你正在做的各個線程睡覺,而不是整個程序。

+2

'而真:通過' - 請不要。這會最大限度地減少你的CPU使用率。這要歸功於GIL,它也會有效地防止其他線程泄露。 – ThiefMaster

+0

我沒有注意到,我更專注於線程部分。我編輯了上面的代碼 –

相關問題