Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 混合器API(bpy)和套接字服务器_Python_Sockets_Python Multithreading_Blender_Bpy - Fatal编程技术网

Python 混合器API(bpy)和套接字服务器

Python 混合器API(bpy)和套接字服务器,python,sockets,python-multithreading,blender,bpy,Python,Sockets,Python Multithreading,Blender,Bpy,我通过shell使用python文件运行blender,如下所示 /blender visualizer.blend-P visualizer.py 在我的python文件中,我有一个套接字服务器,它接收一个列表并在列表上循环以相应地创建网格。 现在的问题是我必须使用线程,这样搅拌机就不会冻结,否则搅拌机的窗口甚至不会显示。 但从套接字线程,因为它似乎我不能创建网格,因为它崩溃了我的搅拌机没有抛出任何异常。我也尝试了多处理,但它冻结了搅拌机。 现在有人知道如何让socket服务器接收数据并创建网

我通过shell使用python文件运行blender,如下所示
/blender visualizer.blend-P visualizer.py
在我的python文件中,我有一个套接字服务器,它接收一个列表并在列表上循环以相应地创建网格。 现在的问题是我必须使用
线程
,这样搅拌机就不会冻结,否则搅拌机的窗口甚至不会显示。 但从套接字线程,因为它似乎我不能创建网格,因为它崩溃了我的搅拌机没有抛出任何异常。我也尝试了
多处理
,但它冻结了搅拌机。 现在有人知道如何让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需要时间来完成一个对象的绘制,然后再要求它绘制另一个对象。所以我所要做的就是把
time.sleep(1)
放在创建对象的循环中。

在blender API文档中,它明确警告您不要使用线程

您可以创建操作符并使用计时器事件运行它。
通过计时器事件,您可以从套接字轮询网络消息并执行任何操作。

blender 2.82a,mac OS Mojave