我通过这样的shell运行带有python文件的blender./blender visualizer.blend -P Visualizer.py
在我的python文件中,我有一个套接字服务器,它接收一个列表,并在列表上循环以相应地创建网格。现在的问题是,我必须使用threading
,这样搅拌机就不会冻结,否则搅拌机的窗口甚至不会显示。但从套接字线程来看,我无法创建网格,因为它会使我的搅拌机崩溃,而不会引发任何异常。我也试过multiprocessing
,它冻结了搅拌机。现在有人知道如何让socket服务器接收数据并创建网格而不冻结搅拌机吗?
def socket_server(*args):
HOST = '127.0.0.1'
PORT = 12345
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
s.bind((HOST, PORT))
s.listen(5)
conn, addr = s.accept()
while 1:
data = conn.recv(16384)
if not data:
break
//creates mesh here
conn.send(b'ok')
time.sleep(1.0)
conn.close()
if __name__ == '__main__':
try:
t = Thread(None, socket_server)#crashes
t.start()
# socket_server() #freezes
# worker = mp.Process(target=socket_server()) #freezes
# worker.daemon = True
# worker.start()
except Exception as e:
print (e)
在blender API文档中,它明确警告您根本不要使用线程。
您可以创建运算符并使用计时器事件运行它。使用定时器事件,您可以从套接字轮询网络消息并执行任何操作。
我意识到搅拌机需要时间来完成绘制一个对象,然后再要求它绘制另一个对象。所以我所要做的就是把time.sleep(1)
放在我的循环中来创建对象。