Google에 핑을하여 인터넷이 작동하는지 확인하는 동안 로딩 메시지를 표시하는 작은 프로그램을 작업 중입니다. 하지만 실행하려고 할 때마다 작은 로딩 기즈모에 남아 있습니다. 어떤 아이디어?
그래서 로딩 기즈모가 멈추지 않는 문제를 해결했지만 이제 다른 문제가 있습니다. 이 소스는 더 큰 프로그램의 일부이며 프로그램이 인터넷이 작동하는 것으로 확인하면 로딩 기즈모가 중지됩니다. 일부 웹 사이트를 ping하는 것으로 예상되지만 대신 잠시 기다렸다가 종료됩니다. 그게 무슨 일인지 아는 사람 있나요?
import urllib2, time, threading
def ping():
try:
urllib2.urlopen("http://www.google.com")
network = 1
except IOError:
network = 0
def network_waiting():
while network == '?':
print "\r[*] Checking network availability.... \ ",
time.sleep(.07)
print "\r[*] Checking network availability.... |",
time.sleep(.07)
print "\r[*] Checking network availability.... /",
time.sleep(.07)
print "\r[*] Checking network availability.... -",
time.sleep(.07)
thread1 = threading.Thread(target = ping)
thread2 = threading.Thread(target = network_waiting)
thread1.start()
thread2.start()
실제로 스레드를 정의하고 시작하는 방법에 대해 약간의 혼란이있을 수 있습니다. 단순히 변수 이름에 "thread"를 사용하여 스레드를 만들지 않습니다. 대신이를 수행 할 수있는 한 가지 방법은 ping 및 network_waiting 메서드를 호출하는 것을 알고있는 스레드 개체를 만드는 것입니다. 이렇게하는 예는 다음과 같습니다.
thread1 = threading.Thread(target = ping)
thread2 = threading.Thread(target = network_waiting)
thread1.start()
thread2.start()
추가 튜토리얼에 관심이있는 경우이 튜토리얼을 확인하십시오 .
편집 : 이제 호출을 스레드로 수정 했으므로 위의 @vanza의 설명을 참조하십시오. network
전역 변수 로 선언하는 방법은 다음과 같습니다 (다음 설명).
import urllib2, time, threading
network = '?'
def ping():
global network
try:
urllib2.urlopen("http://www.google.com")
network = 1
except IOError:
network = 0
def network_waiting():
global network
while network == '?':
print "\r[*] Checking network availability.... \ ",
time.sleep(.07)
print "\r[*] Checking network availability.... |",
time.sleep(.07)
print "\r[*] Checking network availability.... /",
time.sleep(.07)
print "\r[*] Checking network availability.... -",
time.sleep(.07)
thread1 = threading.Thread(target = ping)
thread2 = threading.Thread(target = network_waiting)
thread1.start()
thread2.start()
본질적으로 global
키워드 를 사용하지 않고 Python은 ping
메서드 에서 전역 범위 network
의 network
변수를 덮어 쓰는 대신 이름이 지정된 지역 변수를 만들고 여기에 쓰는 것이라고 생각합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다