2013-03-06 45 views
0
預定量的多個循環

基本上我不知道我需要做的做到這一點..在Python中

我有兩個迴路,並環路不同時間每個:

import time 

while True: 
    print "Hello Matt" 
    time.sleep(5) 

和然後另一個循環:

import time 

while True: 
    print "Hello world" 
    time.sleep(1) 

我需要在程序中二者結合的循環和都需要在獨立的同時和處理數據運行,沒有必要在它們之間共享數據。我想我正在尋找線程或多處理,但我不知道如何實現它這樣的東西。

+1

看的例子(第二個):http://docs.python.org/2/library/multiprocessing.html#examples – Blender 2013-03-06 01:47:58

回答

1

使用的Thread足以讓你的目的:

import time 
from threading import Thread 

def foo(): 
    while True: 
     print "Hello Matt" 
     time.sleep(5) 

def bar(): 
    while True: 
     print "Hello world" 
     time.sleep(1) 

a = Thread(target=foo) 
b = Thread(target=bar) 
a.start() 
b.start() 
+0

非常真棒,都非常有效的答案。與這一個去,因爲它看起來更清潔。問題..通過將'.start()'添加到它們上面的兩個線程的末尾來將最後四行合併爲兩個是否有什麼壞處? – Matthew 2013-03-06 02:07:43

+0

@Mthethew很高興幫助。直接調用'start()'沒有問題,只要你不需要對象的引用(例如,如果你不打算使用另一種方法)。對於你的例子,它是完全有效的。 – 2013-03-06 02:12:52

+0

我看到你'.start()'線程。是否需要'.stop()'線程?垃圾收集? – Matthew 2013-03-06 02:15:45

1

要做到這一點,你可以使用該模塊的線程,就像這樣:

import threading 
import time 

def f(n, str):  # define a function with the arguments n and str 
    while True: 
     print str 
     time.sleep(n) 

t1=threading.Thread(target=f, args=(1, "Hello world")) # create the 1st thread 
t1.start()            # start it 

t2=threading.Thread(target=f, args=(5, "Hello Matt"))  # create the 2nd thread 
t2.start()            # start it 

參考。
http://docs.python.org/2/library/threading.html