1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
from py.test import skip
try:
import stackless
except ImportError:
try:
from lib_pypy import stackless as stackless
except ImportError as e:
skip('cannot import stackless: %s' % (e,))
class Test_StacklessPickling:
def test_pickle_main_coroutine(self):
import stackless, pickle
s = pickle.dumps(stackless.coroutine.getcurrent())
print(s)
c = pickle.loads(s)
assert c is stackless.coroutine.getcurrent()
def test_basic_tasklet_pickling(self):
import stackless
from stackless import run, schedule, tasklet
import pickle
output = []
import new
mod = new.module('mod')
mod.output = output
exec("""from stackless import schedule
def aCallable(name):
output.append(('b', name))
schedule()
output.append(('a', name))
""", mod.__dict__)
import sys
sys.modules['mod'] = mod
aCallable = mod.aCallable
tasks = []
for name in "ABCDE":
tasks.append(tasklet(aCallable)(name))
schedule()
assert output == [('b', x) for x in "ABCDE"]
del output[:]
pickledTasks = pickle.dumps(tasks)
schedule()
assert output == [('a', x) for x in "ABCDE"]
del output[:]
unpickledTasks = pickle.loads(pickledTasks)
for task in unpickledTasks:
task.insert()
schedule()
assert output == [('a', x) for x in "ABCDE"]
|