A fast and light-weight wrapper for Autodesk Maya's standalone extension. ManyMaya leverages the multiprocessing module to run maya.standalone instances concurrently.
Delete attributes from all maya files in a directory.
import manymaya
import maya.cmds as cmds
# Decorate the function you'd like to run in each maya instance.
@manymaya.instance
def delete_attributes(filepath):
cmds.file(filepath, open=True, force=True)
for node in cmds.ls(long=True):
attr = node + '.userattr'
if cmds.objExists(attr):
cmds.deleteAttr(attr)
cmds.file(save=True, force=True)
if __name__ == "__main__":
# Find some files to work on
maya_files = manymaya.find('path/to/search')
# Start instances and run delete_attributes on each file.
manymaya.start(maya_files, delete_attributes)
As you can see ManyMaya is very easy to use. Simply decorate a function that takes a single argument, filepath, then call manymaya.start with a list of filepaths and the decorated function as arguments.
A decorator that wraps your function inside a maya.standalone instance. Every function you decorate with instance, must have a filepath argument.
Creates a multiprocessing Queue and runs several worker processes to pull from it. Must be called in the if name == "main" block.
- file_list: List of files to process.
- fn: Target function.
- processes: Number of processes to run concurrently. (optional)
- verbose: Print verbose output(Set logging level to INFO). (optional)
Search a specified directory for Maya compatible files. Returns a list of filepaths for use with manymaya.start().
- inside: Path to search.
- exts: Extensions of files to include in returned list. (optional)
- subdirs: Search inside subdirs. (optional)
Fluff...Exists only to shorten logging calls.
- message: Message to log.
- level: Level at which to log message. (optional) - "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"
I ran two benchmarks. Creating 2000 new files and Modifying 2000 existing files.
Processes | Creation | Modification |
---|---|---|
1 | 20.77719979 | 39.3076550027 |
2 | 12.1300766695 | 21.6971742295 |
3 | 8.53386258099 | 15.0104674404 |
4 | 6.77421072293 | 11.8595186503 |
git clone https://[email protected]/danbradham/manymaya.git
cd manymaya
python setup.py install
The best way to run a script utilizing ManyMaya is to execute it with mayapy, located in your Maya's bin path. You may want to add Maya's bin folder to your environment path to ease the use of calling mayapy.
mayapy path/to/my/script.py