如何在Python中使用setjmp / longjmp编写我的以下C代码?

时间:2015-06-23 16:07:17

标签: ctypes longjmp setjmp

我想知道在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");
}

1 个答案:

答案 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()