1

我想知道是否可以在 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");
}
4

1 回答 1

0

Python 需要另一种方法,因为直接使用longjmpPython 的堆栈是不安全的。使用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()
于 2015-10-23T10:28:12.460 回答