As for the specific workaround you suggest, having lots of unique function names will work. You might be interested to know that @anvil.server.callable
can take an argument, and that lets you can register a function under whatever name you like. For example:
MY_ID = #...something..
if not app_tables.hosts.get(id=MY_ID):
app_tables.hosts.add_row(id=MY_ID)
@anvil.server.callable("func_" + MY_ID)
def f():
print "Hello from host %s" % MY_ID
# Broadcast
for host in app_tables.hosts.search():
anvil.server.call("func_" + host['id'])