如何使用线程获取数据并将数据写入同一文本文件

时间:2016-12-10 12:13:24

标签: python multithreading python-2.7 python-3.x python-multithreading

关于与以下代码相关的这些数据,

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

代码在这里:

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)

现在我想对线程做同样的事情。 我使用两个线程从两个串口获取数据。由于线程并行工作,我无法创建一个文本文件来逐行排列数据。也就是说,我想从第一个串口获取数据,将其写入文本文件的row = 0和column = 0,然后从第二个串口读取数据并将其写入row = 0和column = 5(因此它正好在第一个端口的数据前面),然后转到下一行(row = 1)并重复此过程。 我希望有类似"时间示例"我从串口读取上面做的。这是我的代码,我不知道如何修复它以及将命令fob.write(str(x)+' ' +str(y)+'\n')放在同一时间写入同一文件的位置。 感谢您的帮助

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')

2 个答案:

答案 0 :(得分:2)

您应该使用队列,实际上是其中两个!

COUNT(DISTINCT)

答案 1 :(得分:1)

谢谢Yoav Glazner 实际上我发现了一种新的方式,我猜也是一个很好的解决方案。 我想只为写一个新线程。它对我有用。你怎么看?

import time, threading
import threading
from datetime import datetime
hour=0
minute = 0
second = 0
microsecond=0
fob=open('test_file_thread.txt','w')

def st():
    global hour
    global minute
    while True:

        exacttime = datetime.now()
        hour = exacttime.hour
        minute = exacttime.minute

def nd():
    global second
    global microsecond
    while True:

        exacttime = datetime.now()
        second = exacttime.second
        microsecond = exacttime.microsecond

def hd():
    while True: 
        fob.write(str(hour) + ' '+ str(minute) + ' '+ str(second) + ' '+ str(microsecond) + '\n')


threading.Timer(0, st).start()
threading.Timer(0, nd).start()
threading.Timer(0, hd).start()