forked from goodboy/tractor
Remove `tractor.run()` once and for all
It's been deprecated for a while now and all docs and tests have been changed. Closes #183we_bein_all_matchy
parent
9aef03772a
commit
ad19bf2cf1
|
@ -23,13 +23,6 @@ async def test_no_arbitter():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def test_no_main():
|
|
||||||
"""An async function **must** be passed to ``tractor.run()``.
|
|
||||||
"""
|
|
||||||
with pytest.raises(TypeError):
|
|
||||||
tractor.run(None)
|
|
||||||
|
|
||||||
|
|
||||||
@tractor_test
|
@tractor_test
|
||||||
async def test_self_is_registered(arb_addr):
|
async def test_self_is_registered(arb_addr):
|
||||||
"Verify waiting on the arbiter to register itself using the standard api."
|
"Verify waiting on the arbiter to register itself using the standard api."
|
||||||
|
|
|
@ -36,7 +36,10 @@ from ._discovery import (
|
||||||
query_actor,
|
query_actor,
|
||||||
)
|
)
|
||||||
from ._supervise import open_nursery
|
from ._supervise import open_nursery
|
||||||
from ._state import current_actor, is_root_process
|
from ._state import (
|
||||||
|
current_actor,
|
||||||
|
is_root_process,
|
||||||
|
)
|
||||||
from ._exceptions import (
|
from ._exceptions import (
|
||||||
RemoteActorError,
|
RemoteActorError,
|
||||||
ModuleNotExposed,
|
ModuleNotExposed,
|
||||||
|
@ -44,7 +47,10 @@ from ._exceptions import (
|
||||||
)
|
)
|
||||||
from ._debug import breakpoint, post_mortem
|
from ._debug import breakpoint, post_mortem
|
||||||
from . import msg
|
from . import msg
|
||||||
from ._root import run, run_daemon, open_root_actor
|
from ._root import (
|
||||||
|
run_daemon,
|
||||||
|
open_root_actor,
|
||||||
|
)
|
||||||
from ._portal import Portal
|
from ._portal import Portal
|
||||||
from ._runtime import Actor
|
from ._runtime import Actor
|
||||||
|
|
||||||
|
@ -72,7 +78,6 @@ __all__ = [
|
||||||
'open_root_actor',
|
'open_root_actor',
|
||||||
'post_mortem',
|
'post_mortem',
|
||||||
'query_actor',
|
'query_actor',
|
||||||
'run',
|
|
||||||
'run_daemon',
|
'run_daemon',
|
||||||
'stream',
|
'stream',
|
||||||
'to_asyncio',
|
'to_asyncio',
|
||||||
|
|
|
@ -23,7 +23,9 @@ from functools import partial
|
||||||
import importlib
|
import importlib
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from typing import Tuple, Optional, List, Any
|
from typing import (
|
||||||
|
Optional,
|
||||||
|
)
|
||||||
import typing
|
import typing
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
|
@ -50,7 +52,7 @@ logger = log.get_logger('tractor')
|
||||||
async def open_root_actor(
|
async def open_root_actor(
|
||||||
|
|
||||||
# defaults are above
|
# defaults are above
|
||||||
arbiter_addr: Optional[Tuple[str, int]] = (
|
arbiter_addr: Optional[tuple[str, int]] = (
|
||||||
_default_arbiter_host,
|
_default_arbiter_host,
|
||||||
_default_arbiter_port,
|
_default_arbiter_port,
|
||||||
),
|
),
|
||||||
|
@ -68,8 +70,8 @@ async def open_root_actor(
|
||||||
# internal logging
|
# internal logging
|
||||||
loglevel: Optional[str] = None,
|
loglevel: Optional[str] = None,
|
||||||
|
|
||||||
enable_modules: Optional[List] = None,
|
enable_modules: Optional[list] = None,
|
||||||
rpc_module_paths: Optional[List] = None,
|
rpc_module_paths: Optional[list] = None,
|
||||||
|
|
||||||
) -> typing.Any:
|
) -> typing.Any:
|
||||||
"""Async entry point for ``tractor``.
|
"""Async entry point for ``tractor``.
|
||||||
|
@ -230,28 +232,35 @@ async def open_root_actor(
|
||||||
logger.runtime("Root actor terminated")
|
logger.runtime("Root actor terminated")
|
||||||
|
|
||||||
|
|
||||||
def run(
|
def run_daemon(
|
||||||
|
enable_modules: list[str],
|
||||||
# target
|
|
||||||
async_fn: typing.Callable[..., typing.Awaitable],
|
|
||||||
*args,
|
|
||||||
|
|
||||||
# runtime kwargs
|
# runtime kwargs
|
||||||
name: Optional[str] = 'root',
|
name: Optional[str] = 'root',
|
||||||
arbiter_addr: Tuple[str, int] = (
|
arbiter_addr: tuple[str, int] = (
|
||||||
_default_arbiter_host,
|
_default_arbiter_host,
|
||||||
_default_arbiter_port,
|
_default_arbiter_port,
|
||||||
),
|
),
|
||||||
|
|
||||||
start_method: Optional[str] = None,
|
start_method: Optional[str] = None,
|
||||||
debug_mode: bool = False,
|
debug_mode: bool = False,
|
||||||
**kwargs,
|
**kwargs
|
||||||
|
|
||||||
) -> Any:
|
) -> None:
|
||||||
"""Run a trio-actor async function in process.
|
'''
|
||||||
|
Spawn daemon actor which will respond to RPC; the main task simply
|
||||||
|
starts the runtime and then sleeps forever.
|
||||||
|
|
||||||
|
This is a very minimal convenience wrapper around starting
|
||||||
|
a "run-until-cancelled" root actor which can be started with a set
|
||||||
|
of enabled modules for RPC request handling.
|
||||||
|
|
||||||
|
'''
|
||||||
|
kwargs['enable_modules'] = list(enable_modules)
|
||||||
|
|
||||||
|
for path in enable_modules:
|
||||||
|
importlib.import_module(path)
|
||||||
|
|
||||||
This is tractor's main entry and the start point for any async actor.
|
|
||||||
"""
|
|
||||||
async def _main():
|
async def _main():
|
||||||
|
|
||||||
async with open_root_actor(
|
async with open_root_actor(
|
||||||
|
@ -261,35 +270,6 @@ def run(
|
||||||
debug_mode=debug_mode,
|
debug_mode=debug_mode,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
):
|
):
|
||||||
|
return await trio.sleep_forever()
|
||||||
|
|
||||||
return await async_fn(*args)
|
|
||||||
|
|
||||||
warnings.warn(
|
|
||||||
"`tractor.run()` is now deprecated. `tractor` now"
|
|
||||||
" implicitly starts the root actor on first actor nursery"
|
|
||||||
" use. If you want to start the root actor manually, use"
|
|
||||||
" `tractor.open_root_actor()`.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2,
|
|
||||||
)
|
|
||||||
return trio.run(_main)
|
return trio.run(_main)
|
||||||
|
|
||||||
|
|
||||||
def run_daemon(
|
|
||||||
enable_modules: list[str],
|
|
||||||
**kwargs
|
|
||||||
) -> None:
|
|
||||||
'''
|
|
||||||
Spawn daemon actor which will respond to RPC.
|
|
||||||
|
|
||||||
This is a convenience wrapper around
|
|
||||||
``tractor.run(trio.sleep(float('inf')))`` such that the first actor spawned
|
|
||||||
is meant to run forever responding to RPC requests.
|
|
||||||
|
|
||||||
'''
|
|
||||||
kwargs['enable_modules'] = list(enable_modules)
|
|
||||||
|
|
||||||
for path in enable_modules:
|
|
||||||
importlib.import_module(path)
|
|
||||||
|
|
||||||
return run(partial(trio.sleep, float('inf')), **kwargs)
|
|
||||||
|
|
Loading…
Reference in New Issue