Ich habe einen Code, der Mauskoordinaten (x, y) und Zeitstempel alle 100ms ausdrucken. Ich will es für 10 Sekunden laufen. Das ist es.Warum läuft mein Python-Code auch nach 10 Sekunden weiter?
So implementiert I „Multiprozessing“ und ich initialisiert es die Hauptfunktion aus dem Inneren der Multiprocessing Funktion „printevery100ms“ zu nennen, und ich sagte es nach 10 Sekunden herunterzufahren.
Aber statt Schließung nach 10 Sekunden gedrückt, springt er über die p.terminate() Befehl und hält läuft und läuft ...
Hier ist der Code ist.
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"
So ist der Multiprocessing Code initialisiert die 10-Sekunden-Timer und es soll es nach 10 Sekunden herunterzufahren, die der Zweck des Befehls terminate ist. Ich habe einen Druckbefehl geschrieben, um "Nicht beendet" auszudrucken, wenn der Code auch nach 10 Sekunden nicht stoppt; Genau das ist passiert. Hier
ist das Ergebnis: (nach 9 Sekunden ..)
("{'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')
Wie Sie sehen können sie Druck „nicht beendet“, was bedeutet, dass es 10 Sekunden lang läuft und es an denen die beenden Befehl, aber läuft weiter, als ob nichts passiert wäre. Kannst du mir bitte sagen, was ich falsch mache oder ob das etwas mit Multi-Processing zu tun hat?