저는 파이썬에서 IRC 봇을 만들고 있습니다. IRC 서버에서 데이터를받을 때마다 반복되는 while
루프가 있습니다. 매분마다 다른 루프 while
을 실행하고 싶기 때문에 루프를 결합 할 수있는 방법이 없습니다.두 개의 while 루프가 하나?
루프 중 하나를 "백그라운드로 설정"하고 "나머지 작업을 수행하는 동안 나머지 프로그램을 계속 실행하는 방법이 있습니까?
저는 파이썬에서 IRC 봇을 만들고 있습니다. IRC 서버에서 데이터를받을 때마다 반복되는 while
루프가 있습니다. 매분마다 다른 루프 while
을 실행하고 싶기 때문에 루프를 결합 할 수있는 방법이 없습니다.두 개의 while 루프가 하나?
루프 중 하나를 "백그라운드로 설정"하고 "나머지 작업을 수행하는 동안 나머지 프로그램을 계속 실행하는 방법이 있습니까?
이 간단한 예를한다고하면 루프와 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_1
과 func_2
이 모두 실행된다고 생각한다면 현재 1.5 seconds
는 아니 입니다 진정한 스레드가 동일한 메모리 공간에서 실행하지만 multiprocessing
를 사용하고 있으면, 별도의 메모리 공간을 가지고 귀하의 경우 당신은이에 대한 더 적합 같은 threading
를 사용해야
마지막으로 동시에 실행하는 것처럼 작업 유형
스레딩이 mutithreading이 아니라는 것은 무엇을 의미합니까? – Ant
@Ant 좋은 질문입니다. OP *에 대한이 주석을 주로 작성했습니다. (이 예제에는 영향을주지 않습니다) *, 간단히 말해서 func_1과 func_2가 동시에 실행되지 않습니다. –
따라서 스레딩에서 'print (x); print (y)'와 같이 "거의 동시에", 그리고 실제로 동시에 실행되는 다중 쓰레드? 관계없이 스레딩은 내 요구에 완벽하게 작동합니다. –
메시지 대기열을 사용하고 싶으십니까? –
여기 'google'python threading 'here .. –
당신이 말하는 것은'threads'입니다. – jramirez