如何在主线程执行某些操作时让一个线程侦听数据

Har*_*Cho 2 python multithreading

我正在尝试创建一个线程来监听来自COM串口的传入数据,而主线程正在进行一些操作.

这是我的代码(为简洁起见省略了一些代码):

def readMsg( serial ):
    msgArray = []
    while ( True ):
        char = "0x" + serial.read().encode('hex')
        if char == '0xfd':
            msgArray = []
            msgArray.append(char)
        elif char == '0xfc':
            msgArray.append(char)
            print debugPrefix, "ComPort:", (serial.port + 1), msgArray
        elif char == '0x':
            pass
        else:
            msgArray.append(char)


# Find available ports                  
initializeComPorts() 

# Print port infos
printComPorts() 

# Opens serial and returns opened serial
serialPort = openPort(1);

print "thread started"
readMsgThread = threading.Thread( target=readMsg(serialPort) )
readMsgThread.setDaemon( True )
readMsgThread.start()

print "sending some data"
serialPort.send('h')
Run Code Online (Sandbox Code Playgroud)

当我执行代码时readMsgThread听得很好,但该行print "sending some data"永远不会执行.有人可以解释一下我错过了什么吗?我已经坚持了一段时间.

非常感谢你.

Tim*_*ers 7

我不能为你测试这个,但仔细想想这一行:

readMsgThread = threading.Thread( target=readMsg(serialPort) )
Run Code Online (Sandbox Code Playgroud)

调用 readMsg(serialPort)完成时调用,并将结果作为target.我猜你几乎肯定想做:

readMsgThread = threading.Thread( target=readMsg, args=(serialPort,) )
Run Code Online (Sandbox Code Playgroud)

代替.

为了澄清一点,因为你正在调用 readMsg该行,在readMsg返回之前不会再执行任何行.但是这个功能永远不会回来 这就是从未见过"发送一些数据"的原因.事实上,你永远不会到达

readMsgThread.setDaemon( True )
Run Code Online (Sandbox Code Playgroud)

声明要么.