Refactoring and initial work on multiprocessing support
This commit is contained in:
parent
45d3e308d9
commit
3e49f71f00
|
@ -6,11 +6,11 @@ from structio.core.managers.signals.sigint import SigIntManager
|
||||||
from structio.core.time.clock import DefaultClock
|
from structio.core.time.clock import DefaultClock
|
||||||
from structio.core.syscalls import sleep, suspend as _suspend
|
from structio.core.syscalls import sleep, suspend as _suspend
|
||||||
from structio.core.context import TaskPool, TaskScope
|
from structio.core.context import TaskPool, TaskScope
|
||||||
from structio.core.exceptions import Cancelled, TimedOut, ResourceClosed
|
from structio.exceptions import Cancelled, TimedOut, ResourceClosed
|
||||||
from structio.core import task
|
from structio.core import task
|
||||||
from structio.core.task import Task, TaskState
|
from structio.core.task import Task, TaskState
|
||||||
from structio.sync import Event, Queue, MemoryChannel, Semaphore, Lock, RLock
|
from structio.sync import Event, Queue, MemoryChannel, Semaphore, Lock, RLock
|
||||||
from structio.core.abc import Channel, Stream, ChannelReader, ChannelWriter
|
from structio.abc import Channel, Stream, ChannelReader, ChannelWriter
|
||||||
from structio import thread
|
from structio import thread
|
||||||
from structio.io.files import open_file, wrap_file, aprint, stdout, stderr, stdin, ainput
|
from structio.io.files import open_file, wrap_file, aprint, stdout, stderr, stdin, ainput
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from abc import abstractmethod, ABC
|
from abc import abstractmethod, ABC
|
||||||
from structio.core.task import Task
|
from structio.core.task import Task
|
||||||
from structio.core.exceptions import StructIOException
|
from structio.exceptions import StructIOException
|
||||||
from typing import Callable, Any, Coroutine
|
from typing import Callable, Any, Coroutine
|
||||||
from types import FrameType
|
from types import FrameType
|
||||||
|
|
|
@ -3,7 +3,7 @@ from structio.core.run import current_loop
|
||||||
from structio.core.task import Task
|
from structio.core.task import Task
|
||||||
from structio.core.syscalls import suspend, checkpoint
|
from structio.core.syscalls import suspend, checkpoint
|
||||||
from typing import Callable, Coroutine, Any
|
from typing import Callable, Coroutine, Any
|
||||||
from structio.core.exceptions import Cancelled, StructIOException
|
from structio.exceptions import Cancelled, StructIOException
|
||||||
|
|
||||||
|
|
||||||
class TaskScope:
|
class TaskScope:
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
import traceback
|
import traceback
|
||||||
import warnings
|
import warnings
|
||||||
from types import FrameType
|
from types import FrameType
|
||||||
from structio.core.abc import BaseKernel, BaseClock, BaseDebugger, BaseIOManager, SignalManager
|
from structio.abc import BaseKernel, BaseClock, BaseDebugger, BaseIOManager, SignalManager
|
||||||
from structio.core.context import TaskPool, TaskScope
|
from structio.core.context import TaskPool, TaskScope
|
||||||
from structio.core.task import Task, TaskState
|
from structio.core.task import Task, TaskState
|
||||||
from structio.util.ki import CTRLC_PROTECTION_ENABLED
|
from structio.util.ki import CTRLC_PROTECTION_ENABLED
|
||||||
from structio.core.time.queue import TimeQueue
|
from structio.core.time.queue import TimeQueue
|
||||||
from structio.core.exceptions import StructIOException, Cancelled, TimedOut
|
from structio.exceptions import StructIOException, Cancelled, TimedOut
|
||||||
from collections import deque
|
from collections import deque
|
||||||
from typing import Callable, Coroutine, Any
|
from typing import Callable, Coroutine, Any
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from structio.core.abc import BaseIOManager, AsyncResource, BaseKernel
|
from structio.abc import BaseIOManager, AsyncResource, BaseKernel
|
||||||
from structio.core.context import Task
|
from structio.core.context import Task
|
||||||
from structio.core.run import current_loop, current_task
|
from structio.core.run import current_loop, current_task
|
||||||
import socket
|
|
||||||
import select
|
import select
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from structio.core.abc import SignalManager
|
from structio.abc import SignalManager
|
||||||
from types import FrameType
|
from types import FrameType
|
||||||
from structio.util.ki import currently_protected
|
from structio.util.ki import currently_protected
|
||||||
from structio.core.run import current_loop
|
from structio.core.run import current_loop
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import inspect
|
import inspect
|
||||||
import functools
|
import functools
|
||||||
from threading import local
|
from threading import local
|
||||||
from structio.core.abc import BaseKernel, BaseDebugger, BaseClock, SignalManager, BaseIOManager
|
from structio.abc import BaseKernel, BaseDebugger, BaseClock, SignalManager, BaseIOManager
|
||||||
from structio.core.exceptions import StructIOException
|
from structio.exceptions import StructIOException
|
||||||
from structio.core.task import Task
|
from structio.core.task import Task
|
||||||
from typing import Callable, Any, Coroutine
|
from typing import Callable, Any, Coroutine
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import random
|
import random
|
||||||
from timeit import default_timer
|
from timeit import default_timer
|
||||||
from structio.core.abc import BaseClock
|
from structio.abc import BaseClock
|
||||||
|
|
||||||
|
|
||||||
class DefaultClock(BaseClock):
|
class DefaultClock(BaseClock):
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from structio.core.task import Task, TaskState
|
from structio.core.task import Task, TaskState
|
||||||
from structio.core.abc import BaseClock
|
from structio.abc import BaseClock
|
||||||
from heapq import heappush, heappop, heapify
|
from heapq import heappush, heappop, heapify
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from structio.core.abc import BaseDebugger
|
from structio.abc import BaseDebugger
|
||||||
|
|
||||||
|
|
||||||
class SimpleDebugger(BaseDebugger):
|
class SimpleDebugger(BaseDebugger):
|
||||||
|
|
|
@ -2,7 +2,7 @@ import io
|
||||||
import sys
|
import sys
|
||||||
import structio
|
import structio
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from structio.core.abc import AsyncResource
|
from structio.abc import AsyncResource
|
||||||
from structio.core.syscalls import check_cancelled
|
from structio.core.syscalls import check_cancelled
|
||||||
|
|
||||||
# Stolen from Trio
|
# Stolen from Trio
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Module inspired by subprocess which allows for asynchronous
|
||||||
|
# multiprocessing
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from structio.abc import StreamWriter, StreamReader
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Process:
|
||||||
|
"""
|
||||||
|
An asynchronous process
|
||||||
|
"""
|
||||||
|
|
||||||
|
args: str | list
|
||||||
|
pid: int
|
||||||
|
stdin: StreamWriter | None = field(default=None)
|
||||||
|
stdout: StreamReader | None = field(default=None)
|
||||||
|
stderr: StreamReader | None = field(default=None)
|
||||||
|
returncode: int | None = field(default=None)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# Task synchronization primitives
|
# Task synchronization primitives
|
||||||
from structio.core.syscalls import suspend, checkpoint
|
from structio.core.syscalls import suspend, checkpoint
|
||||||
from structio.core.exceptions import ResourceClosed
|
from structio.exceptions import ResourceClosed
|
||||||
from structio.core.run import current_task, current_loop
|
from structio.core.run import current_task, current_loop
|
||||||
from structio.core.abc import ChannelReader, ChannelWriter, Channel
|
from structio.abc import ChannelReader, ChannelWriter, Channel
|
||||||
from structio.util.ki import enable_ki_protection
|
from structio.util.ki import enable_ki_protection
|
||||||
from structio.core.task import Task
|
from structio.core.task import Task
|
||||||
from collections import deque
|
from collections import deque
|
||||||
|
|
|
@ -8,11 +8,10 @@ import structio
|
||||||
from structio.sync import Event, Semaphore, Queue
|
from structio.sync import Event, Semaphore, Queue
|
||||||
from structio.util.ki import enable_ki_protection
|
from structio.util.ki import enable_ki_protection
|
||||||
from structio.core.syscalls import checkpoint
|
from structio.core.syscalls import checkpoint
|
||||||
from structio.core.abc import BaseKernel
|
from structio.abc import BaseKernel
|
||||||
from structio.core.run import current_loop
|
from structio.core.run import current_loop
|
||||||
from typing import Callable, Any, Coroutine
|
from typing import Callable, Any, Coroutine
|
||||||
from structio.core.exceptions import StructIOException, TimedOut, Cancelled
|
from structio.exceptions import StructIOException
|
||||||
|
|
||||||
|
|
||||||
_storage = threading.local()
|
_storage = threading.local()
|
||||||
# Max number of concurrent threads that can
|
# Max number of concurrent threads that can
|
||||||
|
|
Loading…
Reference in New Issue