|  | @@ -816,6 +816,83 @@ class PythonLanguage:
 | 
	
		
			
				|  |  |          return 'python'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +class PythonAsyncIOLanguage:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def __init__(self):
 | 
	
		
			
				|  |  | +        self.safename = 'python_asyncio'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def worker_cmdline(self):
 | 
	
		
			
				|  |  | +        return ['tools/run_tests/performance/run_worker_python_asyncio.sh']
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def worker_port_offset(self):
 | 
	
		
			
				|  |  | +        return 1200
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def scenarios(self):
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario('python_asyncio_generic_async_streaming_ping_pong',
 | 
	
		
			
				|  |  | +                                  rpc_type='STREAMING',
 | 
	
		
			
				|  |  | +                                  client_type='ASYNC_CLIENT',
 | 
	
		
			
				|  |  | +                                  server_type='ASYNC_GENERIC_SERVER',
 | 
	
		
			
				|  |  | +                                  use_generic_payload=True,
 | 
	
		
			
				|  |  | +                                  categories=[SMOKETEST, SCALABLE])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario('python_asyncio_protobuf_async_streaming_ping_pong',
 | 
	
		
			
				|  |  | +                                  rpc_type='STREAMING',
 | 
	
		
			
				|  |  | +                                  client_type='ASYNC_CLIENT',
 | 
	
		
			
				|  |  | +                                  server_type='ASYNC_SERVER')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario('python_asyncio_protobuf_async_unary_ping_pong',
 | 
	
		
			
				|  |  | +                                  rpc_type='UNARY',
 | 
	
		
			
				|  |  | +                                  client_type='ASYNC_CLIENT',
 | 
	
		
			
				|  |  | +                                  server_type='ASYNC_SERVER')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario('python_asyncio_protobuf_async_unary_ping_pong',
 | 
	
		
			
				|  |  | +                                  rpc_type='UNARY',
 | 
	
		
			
				|  |  | +                                  client_type='ASYNC_CLIENT',
 | 
	
		
			
				|  |  | +                                  server_type='ASYNC_SERVER',
 | 
	
		
			
				|  |  | +                                  categories=[SMOKETEST, SCALABLE])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario(
 | 
	
		
			
				|  |  | +            'python_asyncio_protobuf_async_unary_qps_unconstrained',
 | 
	
		
			
				|  |  | +            rpc_type='UNARY',
 | 
	
		
			
				|  |  | +            client_type='ASYNC_CLIENT',
 | 
	
		
			
				|  |  | +            server_type='ASYNC_SERVER',
 | 
	
		
			
				|  |  | +            unconstrained_client='async')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario(
 | 
	
		
			
				|  |  | +            'python_asyncio_protobuf_async_streaming_qps_unconstrained',
 | 
	
		
			
				|  |  | +            rpc_type='STREAMING',
 | 
	
		
			
				|  |  | +            client_type='ASYNC_CLIENT',
 | 
	
		
			
				|  |  | +            server_type='ASYNC_SERVER',
 | 
	
		
			
				|  |  | +            unconstrained_client='async')
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario('python_asyncio_to_cpp_protobuf_async_unary_ping_pong',
 | 
	
		
			
				|  |  | +                                  rpc_type='UNARY',
 | 
	
		
			
				|  |  | +                                  client_type='ASYNC_CLIENT',
 | 
	
		
			
				|  |  | +                                  server_type='ASYNC_SERVER',
 | 
	
		
			
				|  |  | +                                  server_language='python_asyncio',
 | 
	
		
			
				|  |  | +                                  async_server_threads=1,
 | 
	
		
			
				|  |  | +                                  categories=[SMOKETEST, SCALABLE])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario(
 | 
	
		
			
				|  |  | +            'python_asyncio_to_cpp_protobuf_sync_streaming_ping_pong',
 | 
	
		
			
				|  |  | +            rpc_type='STREAMING',
 | 
	
		
			
				|  |  | +            client_type='SYNC_CLIENT',
 | 
	
		
			
				|  |  | +            server_type='ASYNC_SERVER',
 | 
	
		
			
				|  |  | +            server_language='python_asyncio',
 | 
	
		
			
				|  |  | +            async_server_threads=1)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        yield _ping_pong_scenario('python_asyncio_protobuf_async_unary_ping_pong_1MB',
 | 
	
		
			
				|  |  | +                                  rpc_type='UNARY',
 | 
	
		
			
				|  |  | +                                  client_type='ASYNC_CLIENT',
 | 
	
		
			
				|  |  | +                                  server_type='ASYNC_SERVER',
 | 
	
		
			
				|  |  | +                                  req_size=1024 * 1024,
 | 
	
		
			
				|  |  | +                                  resp_size=1024 * 1024,
 | 
	
		
			
				|  |  | +                                  categories=[SMOKETEST, SCALABLE])
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def __str__(self):
 | 
	
		
			
				|  |  | +        return 'python_asyncio'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  class RubyLanguage:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def __init__(self):
 | 
	
	
		
			
				|  | @@ -1249,6 +1326,7 @@ LANGUAGES = {
 | 
	
		
			
				|  |  |      'php7_protobuf_c': Php7Language(php7_protobuf_c=True),
 | 
	
		
			
				|  |  |      'java': JavaLanguage(),
 | 
	
		
			
				|  |  |      'python': PythonLanguage(),
 | 
	
		
			
				|  |  | +    'python_asyncio': PythonAsyncIOLanguage(),
 | 
	
		
			
				|  |  |      'go': GoLanguage(),
 | 
	
		
			
				|  |  |      'node': NodeLanguage(),
 | 
	
		
			
				|  |  |      'node_purejs': NodeLanguage(node_purejs=True)
 |