If you have nothing connected the compute method is triggered by either a UI ( think attribute editor or any other connectControl/attributeControl element), when it is selected or visible: I rarely use setDependsDirty: my node use basic relationship and attributeAffects is enough for me.
I have used pretty much all type of attribute as input and output in python and C++( not the generic one that accept different type of data yet ).
What works for me is is to let maya control the dirty bit propagation between connected attributes.
lets examine your node:
MyNode.aOutput = tAttr.create('output', 'output', om.MFnData.kDoubleArray)this is a typeAttribute:
you can write and read from it several MFNData like MFnMatrixData, MFnMeshData,MFnArrayAttrsData, MFnComponentListData, MFnDoubleArrayData( etc more info on the documentation can be found).
Depending on your data type you must use the appropriate MFnfunction:
here MFnDoubleArrayData ()
outHandle = dataBlock.outputValue(MyNode.aOutput)
to write your data, you set an MObject created from this MFNDoubleArrayData:
#MObject create (const MDoubleArray &in, MStatus *ReturnStatus=NULL) #<--- C++ notation
Lets say you have create a MDoubleArray: and fill it
OuputList = OpenMaya.MDoubleArray()
#here expand and fill your value
outputDataFn = OpenMaya.MFNDoubleArrayData()
outputDataObj = outputDataFn.create(OuputList)
outHandle.setMObject(outputDataObj)
outHandle.setClean()
Let me know if it still refuse to works,