summaryrefslogtreecommitdiffstats
path: root/Lib/test/support/interpreters.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/support/interpreters.py')
-rw-r--r--Lib/test/support/interpreters.py183
1 files changed, 0 insertions, 183 deletions
diff --git a/Lib/test/support/interpreters.py b/Lib/test/support/interpreters.py
deleted file mode 100644
index ef9dcaf..0000000
--- a/Lib/test/support/interpreters.py
+++ /dev/null
@@ -1,183 +0,0 @@
-"""Subinterpreters High Level Module."""
-
-import _xxsubinterpreters as _interpreters
-
-# aliases:
-from _xxsubinterpreters import (
- ChannelError, ChannelNotFoundError, ChannelEmptyError,
- is_shareable,
-)
-
-
-__all__ = [
- 'Interpreter', 'get_current', 'get_main', 'create', 'list_all',
- 'SendChannel', 'RecvChannel',
- 'create_channel', 'list_all_channels', 'is_shareable',
- 'ChannelError', 'ChannelNotFoundError',
- 'ChannelEmptyError',
- ]
-
-
-def create(*, isolated=True):
- """
- Initialize a new (idle) Python interpreter.
- """
- id = _interpreters.create(isolated=isolated)
- return Interpreter(id, isolated=isolated)
-
-
-def list_all():
- """
- Get all existing interpreters.
- """
- return [Interpreter(id) for id in
- _interpreters.list_all()]
-
-
-def get_current():
- """
- Get the currently running interpreter.
- """
- id = _interpreters.get_current()
- return Interpreter(id)
-
-
-def get_main():
- """
- Get the main interpreter.
- """
- id = _interpreters.get_main()
- return Interpreter(id)
-
-
-class Interpreter:
- """
- The Interpreter object represents
- a single interpreter.
- """
-
- def __init__(self, id, *, isolated=None):
- self._id = id
- self._isolated = isolated
-
- @property
- def id(self):
- return self._id
-
- @property
- def isolated(self):
- if self._isolated is None:
- self._isolated = _interpreters.is_isolated(self._id)
- return self._isolated
-
- def is_running(self):
- """
- Return whether or not the identified
- interpreter is running.
- """
- return _interpreters.is_running(self._id)
-
- def close(self):
- """
- Finalize and destroy the interpreter.
-
- Attempting to destroy the current
- interpreter results in a RuntimeError.
- """
- return _interpreters.destroy(self._id)
-
- def run(self, src_str, /, *, channels=None):
- """
- Run the given source code in the interpreter.
- This blocks the current Python thread until done.
- """
- _interpreters.run_string(self._id, src_str)
-
-
-def create_channel():
- """
- Create a new channel for passing data between
- interpreters.
- """
-
- cid = _interpreters.channel_create()
- return (RecvChannel(cid), SendChannel(cid))
-
-
-def list_all_channels():
- """
- Get all open channels.
- """
- return [(RecvChannel(cid), SendChannel(cid))
- for cid in _interpreters.channel_list_all()]
-
-
-_NOT_SET = object()
-
-
-class RecvChannel:
- """
- The RecvChannel object represents
- a recieving channel.
- """
-
- def __init__(self, id):
- self._id = id
-
- def recv(self, *, _delay=10 / 1000): # 10 milliseconds
- """
- Get the next object from the channel,
- and wait if none have been sent.
- Associate the interpreter with the channel.
- """
- import time
- sentinel = object()
- obj = _interpreters.channel_recv(self._id, sentinel)
- while obj is sentinel:
- time.sleep(_delay)
- obj = _interpreters.channel_recv(self._id, sentinel)
- return obj
-
- def recv_nowait(self, default=_NOT_SET):
- """
- Like recv(), but return the default
- instead of waiting.
-
- This function is blocked by a missing low-level
- implementation of channel_recv_wait().
- """
- if default is _NOT_SET:
- return _interpreters.channel_recv(self._id)
- else:
- return _interpreters.channel_recv(self._id, default)
-
-
-class SendChannel:
- """
- The SendChannel object represents
- a sending channel.
- """
-
- def __init__(self, id):
- self._id = id
-
- def send(self, obj):
- """
- Send the object (i.e. its data) to the receiving
- end of the channel and wait. Associate the interpreter
- with the channel.
- """
- import time
- _interpreters.channel_send(self._id, obj)
- time.sleep(2)
-
- def send_nowait(self, obj):
- """
- Like send(), but return False if not received.
-
- This function is blocked by a missing low-level
- implementation of channel_send_wait().
- """
-
- _interpreters.channel_send(self._id, obj)
- return False