Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python函数调用未从线程正确运行_Python_Multithreading_User Interface_Port_Maya - Fatal编程技术网

Python函数调用未从线程正确运行

Python函数调用未从线程正确运行,python,multithreading,user-interface,port,maya,Python,Multithreading,User Interface,Port,Maya,我在使其正常工作时遇到了一些问题,我正在尝试将GUI文本附加到allready存在的窗口中,我正在使用适用于autodesk maya的python解释器,我将宿主脚本的一部分附加到这里,在这里检查多个连接,并尝试为每个连接添加文本 当从线程内部的while循环调用interhostdata()函数时,问题出现了,它不会向窗口添加任何内容 但是,每当我在线程之外单独调用函数时,它就会正常工作 如果有人知道我该如何解决这个问题,我会非常感激,提前谢谢 def hostUpdate(): g

我在使其正常工作时遇到了一些问题,我正在尝试将GUI文本附加到allready存在的窗口中,我正在使用适用于autodesk maya的python解释器,我将宿主脚本的一部分附加到这里,在这里检查多个连接,并尝试为每个连接添加文本

当从线程内部的while循环调用interhostdata()函数时,问题出现了,它不会向窗口添加任何内容

但是,每当我在线程之外单独调用函数时,它就会正常工作

如果有人知道我该如何解决这个问题,我会非常感激,提前谢谢

def hostUpdate():
    global socketHost
    global clientL
    clientL=[]
    cmds.text('mt1',e=1,l='Update Process Started...')
    while 1:
        connectionMain,addressMain=socketHost.accept()
        cmds.text('mt1',e=1,l='Connected with: %s'%str(addressMain))
        #----------Different Thread for each connection
        tid=thr.start_new_thread(hostRecieve,(connectionMain,addressMain))
        clientL.append([connectionMain,addressMain,tid])
        cmds.text('mt1',e=1,l='Thread started with: %s'%str(addressMain))

def hostRecieve(connI,addrI):
    global clientL
    cmds.text('mt1',e=1,l='Recieve Process Started...')
    while 1: #------------------------------------Loop to keep listening for connections
        try:
            cmData=connI.recv(4096)
            interpHostData(cmData) #--------------IF I CALL FROM HERE DOSN'T WORK
        except:
            for cl in clientL:
                if connI==cl[0]:
                    clientL.remove(cl)
            cmds.text('mt1',e=1,l='Disconnected from %s'%str(addrI))
            break

def interpHostData(cmDataC):
    global cliLayout
    tplD=cmDataC.split(',')
    if tplD[0]=='0':
        cID=tplD[2]
        cmds.setParent(cliLayout)
        cmds.text(cID+'_1',l=tplD[1])
        cmds.text(cID+'_2',l=tplD[3])
        cmds.text(cID+'_3',l=tplD[4])
        cmds.text(cID+'_4',l='_')
        cmds.text(cID+'_5',l='_')
        cmds.text(cID+'_6',l='_')
        cmds.text(cID+'_7',l='_')
        cmds.text(cID+'_8',l='_')
        cmds.columnLayout(cID+'_9')
        cmds.progressBar(cID+'_10',h=10)
        cmds.progressBar(cID+'_11',h=10)
        cmds.setParent(cliLayout)
        cmds.text(cID+'_12',l='_')
        cmds.text(cID+'_13',l='Online')

只能从主线程运行Maya ui命令。在某种程度上,你可以使用它来解决这个问题,但它需要额外的工作,而且不会像真正的多线程应用程序那样响应迅速。详细解释

非常感谢@theodox