自定义用户输入提示(对对象构造函数)从单独的线程调用时不会出现 /出现



具有表单的函数:

def setup_my_object():
    my_object = My_Object()
    my_object_daemon = Pyro4.core.Daemon(port=55666)
    Pyro4.Daemon.serveSimple({my_object: "my.object"},ns = False,daemon = my_object_daemon)

pyro4库允许通过网络访问对象。因为主过程创建了几个不同的对象,所以使用以下方式创建一个单独的线程:

def main():
    threaded_object = threading.Thread(target = setup_my_object)
    threaded_object.start()

对象是形式的(实际上构造函数更为复杂)。

class My_Object(object):
    def __init__(self):
        name_option = input('nDo you want to enter a name? [y/n]:n')
        if (name_option == 'y')
            self.m_name = add_name()
    def add_name(self):
        name = input('nPlease enter the name: n')
        return(name)

Main()在从Python控制台启动的Linux服务器上运行。问题是当我启动main()控制台从未向我提出"您要输入名称吗?"。我击中输入 - 等待30秒 - 什么都没有。点击输入两次 - 等待30秒什么都没有。只有当我单击五次输入(并且无意间第六次)时,它才会显示"您要输入名称吗?"。发生了什么,我该如何避免这种情况,即获得"您要输入名称?"的即时打印输出?

附加信息:在Windows机器上启动时,我没有看到此问题;问题仅在Linux机器上。

问题可能是您正在从不同线程中进行输入并输出到stdin/stdout。线程和stdin/stdout不能很好地一起工作。想象一下所有坐着在input中的4个线程...然后按Enter ...什么线程会看到您的击键?这基本上是随机的。与他们的输出相同;写入stdout的多个线程会产生非常奇怪的结果。

它并不能解释较大的延迟。您尚未显示所有代码。main()做什么?如果您用一些打印语句替换启动守护程序的pyro调用,问题会消失吗?基本上:确切地确定问题的原因在哪里(代码行),然后从那里继续

最新更新