If you choose multiple processes, you have to intelligently use IPC to coordinate them. But you can happily use pretty much any language.
If you choose threading, scripting languages are problematic. For example, Python has a Global Interpreter Lock. In that case, I think the only "safe" choices are C++ and Java. Java's safe because its "synchronized methods" enforce locking, often in a wasteful manner. C++ leaves the entire synchronization problem in your lap, giving you infinite room for performance and for subtle and maddening bugs.
Multi-process is generally a better approach than threading. I've seen too much time spent debugging threaded apps to ever recommend that approach. Every hour poured into debugging a deadlock, or worse yet, a mysterious cross-thread heap trampling is an hour taken away from improving the product.
It really depends on your application, though. If it isn't a web application, and state matters, then you're going to have to go elsewhere.
Most interesting systems have multiple dynamically interacting processes, but this might be a bias of mine from the robotics world.
Another pretty exciting language you might to look at is F# - presently running under Mono on my macbook.
Finally, if you love your python (who doesn't? ;)) - see http://www.parallelpython.com/ for some interesting work.
From my experience average increase in speed gained from porting to C/C++ (even without using multi processors) is about x60-x100.
Understanding concurrency in Python: They're called process-ors, not thread-ors... ;-)