2013-11-22 1 views
1

저는 파이썬에서 IRC 봇을 만들고 있습니다. IRC 서버에서 데이터를받을 때마다 반복되는 while 루프가 있습니다. 매분마다 다른 루프 while을 실행하고 싶기 때문에 루프를 결합 할 수있는 방법이 없습니다.두 개의 while 루프가 하나?

루프 중 하나를 "백그라운드로 설정"하고 "나머지 작업을 수행하는 동안 나머지 프로그램을 계속 실행하는 방법이 있습니까?

+0

메시지 대기열을 사용하고 싶으십니까? –

+0

여기 'google'python threading 'here .. –

+0

당신이 말하는 것은'threads'입니다. – jramirez

답변

4

이 간단한 예를한다고하면 루프와 time.sleep(seconds)

import threading 
import time 

def func_1(): 
    i = 0 
    while i<5: 
     i += 1 
     time.sleep(1.5) # Do some work for 1.5 seconds 
     print 'func_1' 

def func_2(): 
    i = 0 
    while i<5: 
     i += 1 
     time.sleep(0.5) # Do some work for 0.5 seconds 
     print 'func_2' 

thread1 = threading.Thread(target=func_1) 
thread1.start() 
thread2 = threading.Thread(target=func_2) 
thread2.start() 

가 생산 몇 가지 작업을 모방하는 데 사용되는 동안이 경우에는 두 가지가 있습니다, 시작하려면 :

func_2 #0.5 seconds elapsed 
func_2 #1.0 seconds elapsed 
func_1 #1.5 seconds elapsed finally func_1 :) 
func_2 #1.5 threading is not mutithreading! ;) 
func_2 #2.0 seconds elapsed 
func_2 #2.5 seconds elapsed and since variable i is 5 func_2 is no more :(
func_1 #3.0 seconds elapsed 
func_1 #4.5 seconds elapsed 
func_1 #6.0 seconds elapsed 
func_1 #7.5 seconds elapsed 

편집 :

내가 의미하는 바가 threading is not mutithreading! ;)인데, 어떤 경우라도 func_1func_2이 모두 실행된다고 생각한다면 현재 1.5 seconds는 아니 입니다 진정한 스레드가 동일한 메모리 공간에서 실행하지만 multiprocessing를 사용하고 있으면, 별도의 메모리 공간을 가지고 귀하의 경우 당신은이에 대한 더 적합 같은 threading를 사용해야

마지막으로 동시에 실행하는 것처럼 작업 유형

+0

스레딩이 mutithreading이 아니라는 것은 무엇을 의미합니까? – Ant

+0

@Ant 좋은 질문입니다. OP *에 대한이 주석을 주로 작성했습니다. (이 예제에는 영향을주지 않습니다) *, 간단히 말해서 func_1과 func_2가 동시에 실행되지 않습니다. –

+0

따라서 스레딩에서 'print (x); print (y)'와 같이 "거의 동시에", 그리고 실제로 동시에 실행되는 다중 쓰레드? 관계없이 스레딩은 내 요구에 완벽하게 작동합니다. –