You should be able to observe the map/reduce job using
db.currentOp(). That will return a list of in-progress operations, along with their operation ID's and other details. You can then use
db.killOp() to kill an operation by its ID.
Using the mongo shell, you can see what each command does internally, too. Omitting "()" from for "db.currentOp" on the shell shows:
if (typeof arg == "object") {
return this.$cmd.sys.inprog.findOne(q);
So, even if pymongo doesn't have a method for the currentOp or killOp shell helpers, you can implement it yourself. Additionally, you can query the current Ops. This would return any map/reduce jobs on the foo collection:
db.currentOp({"query.mapreduce":"foo"});
As for cleaning up temp collections, you can do that manually. It will vary depending on your output options for the map/reduce job. Thankfully, those options should be included (along with the map and reduce functions) in the record returned by the currentOp query.