具有表单的函数:
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调用,问题会消失吗?基本上:确切地确定问题的原因在哪里(代码行),然后从那里继续