У меня есть код, который выдает координату мыши (x, y) и отметки времени каждые 100ms. Я хочу, чтобы он работал в течение 10 секунд. Вот и все.Почему мой код Python продолжает работать даже через 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 секунд и получите согласующие , но продолжает работать, как будто ничего не произошло. Не могли бы вы рассказать мне, что я делаю неправильно, или если это имеет какое-то отношение к многопроцессорной обработке?