Neo Wang
Neo Wang

Reputation: 11

How to make cmds.duplicate() execute immediately when called in maya

How to make cmds.duplicate execute immediately when called in maya? Instead of waiting for the entire script to run and then executing it in batches. For example, for this script below, all execution results will appear immediately after the entire script is executed

import time

for i in range(1, 6):
  pm.select("pSphere{}".format(i))
  time.sleep(0.5)
  cmds.duplicate()

I have tried to use python multithreading, like this

import threading
import time

def test():
    for i in range(50):
        cmds.duplicate('pSphere1')
        time.sleep(0.1)

thread = threading.Thread(target=test)
thread.start()
#thread.join()

Sometimes it can success, but sometimes it will crash maya. If the main thread join, it will not achieve the effect. When I want to do a large number of cmds.duplicate, it will resulting in a very high memory consumption, and the program runs more and more slowly. In addition, all duplicate results appear together after the entire python script runs, so I suspect that when I call cmds When duplicating, Maya did not finish executing and outputting the command, but temporarily put the results in a container with variable capacity. With the increase of my calls, the process of dynamic expansion of the container causes the program to become slower and slower, and the memory consumption also increase dramatically. Because I saw that other plug-ins can see the command execution results in real time, so I thought that this should be a proper way to do this just thath I haven't found yet

Upvotes: 1

Views: 219

Answers (2)

haggi krey
haggi krey

Reputation: 1978

Your assumptions are not correct. Maya does not need to display anything to complete a tool. If you want to see the results inbetween you can try to use:

pm.refresh()

but this will not change the behaviour in general. I suppose your memory problems have a different source. You could check if it helps to turn off history or the undo queue temporarily.

And of course Ennakard is right with the answer, that most maya commands are not thread save unless mentioned in the docs. Every node creation and modificatons have to be done in the main thread.

Upvotes: 2

Ennakard
Ennakard

Reputation: 125

The simple answer is you don't, maya command in general and most interaction with maya are not thread safe threading is usually used for data manipulation before it get used to manipulate anything in maya, but once you start creating node or setting attribute, or any maya modification, no threading.

Upvotes: 1

Related Questions