pyshaper lets you set bandwidth minimum and maximum limits on several criteria:
* remote host/port, and local host/port (most shaper apps have this)
* pid of locally connected program
* username under which local program is running
* command line and arguments under which local program was launched
* country in which remmote peer resides
Or, you can set individual inbound and/or outbound limits based on specific countries (or all countries other than your own).