마우스 좌표 (x, y) 및 시간 스탬프마다 100ms을 인쇄하는 코드가 있습니다. 에 10 초 동안 실행하고 싶습니다.. 그게 전부 야. 파이썬 코드가 10 초 후에도 계속 실행되는 이유는 무엇입니까?
그래서 나는 " 가 멀티 프로세싱"구현 나는 멀티 기능 내부에서 주요 기능을 "printevery100ms" 전화를 초기화하고 나는 그것이 10 초 후에 종료했다.는하지만 그 대신 10 초 후에 종료, 그것은
여기 코드의 ... p.terminate() 명령을 건너 뛰어 실행 및 실행 유지합니다.
import multiprocessing
import time
import threading
import datetime
def printevery100ms():
threading.Timer(.1,printevery100ms).start()
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
from ctypes import windll,Structure,c_int,byref
class POINT(Structure):
_fields_ = [("x",c_int),("y",c_int)]
def queryMousePosition():
pt = POINT()
windll.user32.GetCursorPos(byref(pt))
return {"x": pt.x,"y": pt.y}
pos = queryMousePosition()
print('{{\'x\': {}, \'y\': {}}}'.format(pos['x'],pos['y']),st)
printevery100ms()
if __name__ == '__main__':
# Start printevery100ms as a process
p = multiprocessing.Process(target=printevery100ms, name="printevery100ms", args=(10,))
p.start()
# Wait 10 seconds for printevery100ms
time.sleep(10)
# Terminate printevery100ms
p.terminate()
p.join()
print "Not Terminated"
는 그래서 멀티 코드는 10 초 타이머를 초기화하고 종료 명령의 목적은 10 초 후에 시스템을 종료하기로했다. 10 초 후에도 코드가 멈추지 않으면 "종료되지 않음"을 출력하는 인쇄 명령을 작성했습니다. 그것은 정확하게 일어난 일입니다. 여기
은 결과입니다 (9 초 후에 ..)
("{'x': 1255, 'y': 395}", '2017-01-19 13:31:58')
("{'x': 1255, 'y': 395}", '2017-01-19 13:31:58')
("{'x': 1255, 'y': 395}", '2017-01-19 13:31:58')
Not Terminated
("{'x': 1205, 'y': 399}", '2017-01-19 13:31:58')
("{'x': 961, 'y': 410}", '2017-01-19 13:31:58')
("{'x': 610, 'y': 407}", '2017-01-19 13:31:58')
당신은 그것이 10 초 동안 실행하고 그것이 종료에 도착 의미 "종료되지 않음"인쇄하는 것 볼 수 있듯이 명령을 실행하지만 아무 일도 일어나지 않는 것처럼 계속 실행합니다. 제가 잘못하고있는 일이나 이것이 다중 처리와 관련이 있다면 나에게 말해 주실 수 있습니까?