我想知道在Python中是否可以实现setjmp / longjmp?如果没有,是否有其他替代方案?
#include <setjmp.h>
#include <stdio.h>
jmp_buf env;
void fl(void);
void f2(void);
int main(void)
{
if (setjmp(env) == 0)
printf("setjmp returned 0\n");
else {
printf("Program terminates: longjmp called\n");
return 0;
}
f1();
printf("Pregram terminates normally\n");
return O;
}
void f1(void)
{
printf("f1 begins\n");
f2();
printf("f1 returns\n");
}
void f2(void)
{
printf("f2 begins\n");
longjmp(env, 1);
printf("f2 returns\n");
}
答案 0 :(得分:0)
Python需要另一种方法,因为直接使用longjmp
对于Python的堆栈是不安全的。使用greenlet:
from greenlet import greenlet
def test1():
print 12
gr2.switch()
print 34
def test2():
print 56
gr1.switch()
print 78
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()