python培训之阻塞调度如何使用

发布时间:2023-03-02 09:42:15 人气:25 作者:多测师

  python阻塞调度如何使用

  说明

  标准调度是python使用软件时钟调度线程,有时python的线程会自动阻塞,例如raw_input(),sleep()等功能,此时python使用阻塞调度。

  1、主线程调用sleep后,立即释放GIL。

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

  2、子线程获得GIL。主线程和子线程可以同时由操作系统安排。

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

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

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

python培训之阻塞调度如何使用

  实例

  [ceval.h]

  #define Py_BEGIN_ALLOW_THREADS { \

  PyThreadState *_save; \

  _save = PyEval_SaveThread();

  #define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \

  }

  [ceval.c]

  PyThreadState* PyEval_SaveThread(void)

  {

  PyThreadState *tstate = PyThreadState_Swap(NULL);

  if (interpreter_lock)

  PyThread_release_lock(interpreter_lock);

  return tstate;

  }

  void PyEval_RestoreThread(PyThreadState *tstate)

  {

  if (interpreter_lock) {

  int err = errno;

  PyThread_acquire_lock(interpreter_lock, 1);

  errno = err;

  }

  PyThreadState_Swap(tstate);

  }

  以上就是python阻塞调度的使用,希望对大家有所帮助。更多Python学习指路:请关注多测师。https://www.e70w.com/xwzx/


返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线