Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Add tests that ensure we properly handle restoring in same interpreter.
  • Loading branch information
ericsnowcurrently committed Feb 20, 2018
commit 34555702490006a07b42ab923a51f2c0e7f3fee1
49 changes: 49 additions & 0 deletions Lib/test/test__xxsubinterpreters.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import pickle
from textwrap import dedent, indent
import threading
import time
import unittest

from test import support
Expand Down Expand Up @@ -1147,6 +1148,54 @@ def test_send_recv_different_interpreters(self):

self.assertEqual(obj, b'spam')

def test_send_recv_different_threads(self):
cid = interpreters.channel_create()

def f():
while True:
try:
obj = interpreters.channel_recv(cid)
break
except interpreters.ChannelEmptyError:
time.sleep(0.1)
interpreters.channel_send(cid, obj)
t = threading.Thread(target=f)
t.start()

interpreters.channel_send(cid, b'spam')
t.join()
obj = interpreters.channel_recv(cid)

self.assertEqual(obj, b'spam')

def test_send_recv_different_interpreters_and_threads(self):
cid = interpreters.channel_create()
id1 = interpreters.create()
out = None

def f():
nonlocal out
out = _run_output(id1, dedent(f"""
import time
import _xxsubinterpreters as _interpreters
while True:
try:
obj = _interpreters.channel_recv({int(cid)})
break
except _interpreters.ChannelEmptyError:
time.sleep(0.1)
assert(obj == b'spam')
_interpreters.channel_send({int(cid)}, b'eggs')
"""))
t = threading.Thread(target=f)
t.start()

interpreters.channel_send(cid, b'spam')
t.join()
obj = interpreters.channel_recv(cid)

self.assertEqual(obj, b'eggs')

def test_send_not_found(self):
with self.assertRaises(interpreters.ChannelNotFoundError):
interpreters.channel_send(10, b'spam')
Expand Down