在多线程中追加字符串

2024-06-16 10:17:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在执行多线程并尝试将',F'附加到msg(string)'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

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


Tags: 代码messagestringifputmsglowerprint
2条回答

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

另一方面,没有理由认为放入队列的消息在任何方面都是损坏的。如果你不这么想,你需要提供更多的细节。你知道吗

如果试图删除带有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]如果您确定它总是以crlf结尾…。你知道吗

另外,如果所涉及的任何协议都指定了对crlf的偏好,或者即使它只是与您传递的内容一致,您可能希望添加,F\r\n,而不是,F\n。你知道吗

相关问题 更多 >