auf diese Daten Bezug zu schreiben, die den folgenden Code verwendet sind,Wie kann ich Threading verwenden, um Daten zu erhalten und Daten auf die gleiche Textdatei
12 41 58 82000
12 41 58 190000
12 41 58 301000
12 41 58 416000
12 41 58 524000
12 41 58 632000
12 41 58 741000
12 41 58 849000
12 41 58 959000
12 41 59 65000
12 41 59 174000
12 41 59 281000
12 41 59 389000
12 41 59 496000
12 41 59 605000
12 41 59 711000
12 41 59 820000
12 41 59 927000
12 42 0 36000
12 42 0 143000
12 42 0 252000
12 42 0 360000
12 42 0 469000
12 42 0 577000
12 42 0 685000
12 42 0 793000
12 42 0 901000
12 42 1 9000
der Code ist hier:
from datetime import datetime
minute = 0
second = 0
microsecond=0
fob=open('test_file_thread.txt','w')
def st():
global hour
global minute
exacttime = datetime.now()
hour = exacttime.hour
minute = exacttime.minute
def nd():
global second
global microsecond
exacttime = datetime.now()
second = exacttime.second
microsecond = exacttime.microsecond
while True:
st()
nd()
fob.write(str(hour) + ' '
+ str(minute) + ' '
+ str(second) + ' '
+ str(microsecond) + '\n')
time.sleep(0.1)
Jetzt möchte ich das gleiche mit Threading machen. Ich verwende zwei Threads, um Daten von zwei seriellen Ports zu erhalten. Da Threads parallel arbeiten, kann ich keine Textdatei erstellen, um die Daten Zeile für Zeile anzuordnen. Das heißt, ich möchte die Daten von der ersten seriellen Schnittstelle abrufen und sie dann in Zeile = 0 und Spalte = 0 einer Textdatei schreiben lese die Daten vom zweiten seriellen Port und schreibe sie in Zeile = 0 und Spalte = 5 (also genau vor Daten vom ersten Port), dann geh zur nächsten Zeile (Zeile = 1) und wiederhole diesen Vorgang. Ich möchte etwas wie das "Zeitbeispiel" haben, das ich oben mit dem Lesen von der seriellen Schnittstelle gemacht habe. Das ist mein Code und ich weiß nicht, wie ich ihn beheben soll und wo ich den Befehl fob.write(str(x)+' ' +str(y)+'\n')
schreiben kann, um alles in derselben Zeit in dieselbe Datei zu schreiben. Dank für jede Hilfe
import time, threading
import threading
import serial
x=0
y=0
fob=open('test_file_thread.txt','w')
ser1 = serial.Serial("COM5", baudrate=9600, timeout=1)
ser2 = serial.Serial("COM4", baudrate=9600, timeout=0.25)
def st():
global x
while True:
x = ser1.readline()
def nd():
global y
while True:
y= ser2.readline()
threading.Timer(0, st).start()
threading.Timer(0, nd).start()
fob.write(str(x)+' ' +str(y)+'\n')
Wenn die beiden Threads seriellen Ports lesen gleichzeitig laufen und wahrscheinlich Daten mit unterschiedlichen Geschwindigkeiten zu erzeugen, warum Sie wollen Daten aus dem ersten Port zu tun, neben Daten aus dem zweiten Port om der gleichen Linie, die wahrscheinlich gelesen zu einem anderen Zeitpunkt (oder vielleicht noch nicht einmal gelesen)? Wie auch immer, die Art und Weise, wie diese Art von Problem normalerweise behandelt wird, besteht darin, die Daten in eine "Queue.Queue" in den verschiedenen Threads zu setzen und dann Daten daraus in einem anderen zu erhalten (und in eine Datei in letzterem zu schreiben). – martineau
In Bezug auf Ihre Frage, wie es im Code geschrieben ist, arbeiten die zwei seriellen Schnittstellen mit unterschiedlichen Timeouts. Aber diese Zeiten sind miteinander verbunden. Es ist nicht notwendig, wenn eine Variable aktualisiert wird, eine andere erhält auch einen neuen Wert; es kann wiederholt werden. Stellen Sie sich vor, dass Sie laufen. Eine Variable kann Ihre Herzfrequenz sein und eine andere kann Ihre Geschwindigkeit sein. In diesem Beispiel ist es möglich, dass sich Ihre Geschwindigkeit plötzlich ändert, während sich Ihre Herzfrequenz allmählich ändert. Sie würden also für ein paar Sekunden die gleiche Herzfrequenz haben, während Ihre Geschwindigkeit in all diesen Sekunden geändert wurde. –