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