python阻塞和非阻塞,python阻塞队列

  python阻塞和非阻塞,python阻塞队列

  说明

  标准调度是python使用软件时钟来调度线程。有时候python的线程会自动阻塞,比如raw_input()、sleep()等函数。这时候python使用的是阻塞调度。

  1.主线程调用睡眠后,立即释放GIL。

  调用操作系统的睡眠操作。此时,主线程由操作系统自动管理。

  2.子线程获得GIL。操作系统可以同时调度主线程和子线程。

  操作系统在执行子线程一段时间后挂起,安排主线程,在主线程睡眠结束前挂起主线程,继续唤醒子线程执行。

  3.当主线程结束时,操作系统唤醒主线程。

  主线程调用Py_END_ALLOW_THREADS再次申请GIL,重新进入python标准调度流程。

  实例

  [ceval.h]

  # define py _ BEGIN _ ALLOW _ THREADS {

  python readstate * _ save;

  _ save=pye val _ save thread();

  # define py _ END _ ALLOW _ THREADSPyEval _ restore thread(_ save);

  }

  [ceval.c]

  python readstate * pye val _ save thread(void)

  {

  python readstate * tstate=python readstate _ Swap(NULL);

  if(解释器_锁)

  PyThread _ release _ lock(解释器_锁);

  returntstate

  }

  voidPyEval _ restore thread(python readstate * tstate)

  {

  if(interpreter_lock){

  interr=errno

  PyThread _ acquire _ lock(解释器_锁,1);

  errno=err

  }

  python readstate _ Swap(tstate);

  }以上是python分块调度的使用。希望对你有帮助。更多python学习方向:Python基础课程

  本教程运行环境:windows7系统,Python 3.9.1,DELL G3电脑。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: