API Blender (bpy) и сервер сокетов - PullRequest
0 голосов
/ 24 марта 2020

Я запускаю blender с файлом 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)

1 Ответ

0 голосов
/ 24 марта 2020

Я понял, что Блендеру нужно время, чтобы завершить sh рисование объекта, прежде чем попросить его нарисовать другой. так что все, что мне нужно было сделать, это поместить time.sleep(1) в мой l oop для создания объектов.

...