在多线程中追加字符串

时间:2018-10-31 06:18:15

标签: python multithreading

我正在执行多线程,并尝试将' ,F '附加到味精(字符串)' pSDATA,0,4,2,2,0,4\n '中。最终,我想得到' pSDATA,0,4,2,2,0,4,F\n ',但是当我运行以下代码时:

if(msg[0].lower() == 'p'):
    msg = msg[:-1] + ',F\n'
    pcQueue.put_nowait(msg[1:])
    print ("Message received: ") + msg[1:]

我得到以下结果:

,Fssage received: SDATA,0,4,2,2,0,4

我怀疑这是由于多线程。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

如果您尝试使用msg[:-1]删除尾随换行符,请注意该字符串可能以"\r\n"结尾。 \r通常具有返回到输出行的开头并继续在此处写的效果。正确的操作方式取决于您为什么要删除结尾的换行符,但是如果您想从尾部完全删除尾行,可以选择同时支持\r\n\n,这是您可以执行的操作它:

def chomp(s):
    if s.endswith('\n'):
        if s.endswith('\r\n'):
            return s[:-2]
        return s[:-1]
    return s

⋮

if msg[0].lower() == 'p':
    msg = chomp(msg) + ',F\n'
    ⋮

其他可供选择的内容可能包括msg.rstrip(),以便从末尾删除所有空白,msg[:-2](如果您确定它总是以CR LF结尾,则…)。

此外,如果所涉及的任何协议都指定了CR LF的首选项,或者即使它与您所传递的内容一致,那么您可能想要添加,F\r\n而不是,F\n。 / p>

答案 1 :(得分:0)

如果您有多个线程同时打印到控制台,则不能保证打印是原子的。这意味着来自不同线程的消息确实可以在控制台上交错。如果有问题,则应使用同步(http://effbot.org/zone/thread-synchronization.htm)。

另一方面,没有理由认为放入队列中的消息无论如何都已损坏。否则,您需要提供更多详细信息。