【问题标题】:Blender API (bpy) and socket serverBlender API (bpy) 和套接字服务器
【发布时间】:2020-07-04 23:18:16
【问题描述】:

我正在通过这样的 shell 运行带有 python 文件的搅拌机 ./blender visualizer.blend -P Visualizer.py 在我的 python 文件中,我有一个套接字服务器,它接收一个列表并在列表上循环以相应地创建网格。 现在的问题是我必须使用threading 这样搅拌机就不会冻结,否则搅拌机的窗口甚至不会显示。 但是从套接​​字线程看来,我无法创建网格,因为它会使我的搅拌机崩溃而不会引发任何异常。我也试过multiprocessing,它会冻结搅拌机。 现在有人知道如何让套接字服务器接收数据并在不冻结搅拌机的情况下创建网格吗?

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 2.82a, mac OS Mojave

标签: python sockets python-multithreading blender bpy


【解决方案1】:

在搅拌机 API 文档中,它清楚地警告您根本不要使用线程。

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

【讨论】:

    【解决方案2】:

    我开始意识到搅拌机在要求它绘制另一个对象之前需要时间来完成绘制一个对象。所以我所要做的就是将time.sleep(1) 放入我的循环中以创建对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-30
      • 2011-05-07
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 2011-11-19
      相关资源
      最近更新 更多