Add initial readers-writer shm list tests
							parent
							
								
									37de543feb
								
							
						
					
					
						commit
						2a6d3e313a
					
				|  | @ -0,0 +1,84 @@ | ||||||
|  | """ | ||||||
|  | Shared mem primitives and APIs. | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | # import numpy | ||||||
|  | import pytest | ||||||
|  | import trio | ||||||
|  | import tractor | ||||||
|  | from tractor._shm import ( | ||||||
|  |     open_shm_list, | ||||||
|  |     attach_shm_list, | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @tractor.context | ||||||
|  | async def child_read_shm_list( | ||||||
|  |     ctx: tractor.Context, | ||||||
|  |     shm_key: str, | ||||||
|  |     use_str: bool, | ||||||
|  | ) -> None: | ||||||
|  | 
 | ||||||
|  |     shml = attach_shm_list(key=shm_key) | ||||||
|  |     await ctx.started(shml.key) | ||||||
|  | 
 | ||||||
|  |     async with ctx.open_stream() as stream: | ||||||
|  |         async for i in stream: | ||||||
|  |             print(f'reading shm list index: {i}') | ||||||
|  | 
 | ||||||
|  |             if use_str: | ||||||
|  |                 expect = str(float(i)) | ||||||
|  |             else: | ||||||
|  |                 expect = float(i) | ||||||
|  | 
 | ||||||
|  |             assert expect == shml[i] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @pytest.mark.parametrize( | ||||||
|  |     'use_str', [False, True], | ||||||
|  | ) | ||||||
|  | def test_parent_writer_child_reader( | ||||||
|  |     use_str: bool, | ||||||
|  | ): | ||||||
|  | 
 | ||||||
|  |     async def main(): | ||||||
|  |         async with tractor.open_nursery() as an: | ||||||
|  | 
 | ||||||
|  |             # allocate writeable list in parent | ||||||
|  |             key = 'shm_list' | ||||||
|  |             shml = open_shm_list( | ||||||
|  |                 key=key, | ||||||
|  |                 readonly=False, | ||||||
|  |             ) | ||||||
|  | 
 | ||||||
|  |             portal = await an.start_actor( | ||||||
|  |                 'shm_reader', | ||||||
|  |                 enable_modules=[__name__], | ||||||
|  |             ) | ||||||
|  | 
 | ||||||
|  |             async with ( | ||||||
|  |                 portal.open_context( | ||||||
|  |                     child_read_shm_list,  # taken from pytest parameterization | ||||||
|  |                     shm_key=key, | ||||||
|  |                     use_str=use_str, | ||||||
|  |                 ) as (ctx, sent), | ||||||
|  | 
 | ||||||
|  |                 ctx.open_stream() as stream, | ||||||
|  |             ): | ||||||
|  | 
 | ||||||
|  |                 assert sent == key | ||||||
|  | 
 | ||||||
|  |                 for i in range(2 ** 10): | ||||||
|  | 
 | ||||||
|  |                     val = float(i) | ||||||
|  |                     if use_str: | ||||||
|  |                         val = str(val) | ||||||
|  | 
 | ||||||
|  |                     print(f'writing {val}') | ||||||
|  |                     shml[i] = val | ||||||
|  |                     await stream.send(i) | ||||||
|  | 
 | ||||||
|  |             await portal.cancel_actor() | ||||||
|  | 
 | ||||||
|  |     trio.run(main) | ||||||
		Loading…
	
		Reference in New Issue