私はマウス座標(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秒間実行され、それが終了し得ることを意味している「終了していません」の印刷だ見ることができるように何も起こらなかったかのように走り続けます。私は何が間違っているのか、あるいはこれが複数の処理と関係があるのか教えてください。