我试图写一个聊天逻辑,所以这里我想做的
def chatlogic():
talk=True
while talk:
if __name__ == '__main__':
Thread(target = fluse).start()
message = raw_input('enter a message: ')
if not message: #Ending Conversation if empty message was sent
talk=False
conv_file.write('[%s]%s: %s\n' %(msgtime,user,message))
#conv_file.flush()
return 'Conversation Ended'
def fluse():
while True:
time.sleep(1)
conv_file.fluse()
文件必须每秒钟更新一次,无论您在做什么。 我做错什么了? 注意:我以前从未使用过多任务处理
这段代码中有许多问题,但您似乎要问的问题如下:
这意味着每次通过循环,即每条消息一次,您将触发一个新的
fluse
线程。线程将永远循环,每秒调用conv_file.fluse()
,直到时间结束。你知道吗因此,如果你在应用程序启动后的0.3秒、2.7秒和5.1秒输入消息,你将在5.3秒得到一个
fluse
,在5.7秒得到另一个,在6.1秒得到另一个,依此类推。你知道吗如果希望这种情况只发生一次/秒,只需启动一个线程,而不是每次通过循环启动一个新线程。例如:
相反,如果希望它发生在每个
write
之后的一秒钟,而不是之后的每一秒钟,只需将循环从函数中取出:尽管在这种情况下,
threading.Timer
是做同样事情的一种更简单的方法。你知道吗不管怎样,正如我所说的,即使有了这个解决方案,还有很多其他问题:
flush
而不是fluse
?你知道吗return
,这意味着您只会循环一次。你知道吗chatlogic
函数,因此程序只会立即退出而不做任何工作。你知道吗如果我修复了程序中的所有其他错误,并添加了一些东西来显示
fluse
线程是否正在执行它的任务,它会做一些事情……也许您可以告诉我们它是否是您想要的。你知道吗这仍然是一个奇怪的设计。即使你没有写任何东西,文件也会被刷新一次/秒,而且不能保证它会在最后被刷新,以此类推。但听起来你就是想这么做的。你知道吗
相关问题 更多 >
编程相关推荐