线程如何在Python中产生剩余的量子?
我有一个轮询一个硬件的线程。
while not hardware_is_ready(): pass process_data_from_hardware()
但是还有其他线程(和进程!)可能有事情要做。 如果是这样,我不想刻录CPU检查硬件每隔一个指令。 我已经处理线程已经有一段时间了,而当我做了它不是Python,但我相信大多数线程库都有一个yield
函数或者一个让线程告诉调度器的东西“给其他线程一个机会。 “
while not hardware_is_ready(): threading.yield() # This function doesn't exist. process_data_from_hardware()
但是在线程文档中找不到像这样的任何引用。 Python确实有一个yield
语句,但是我很确定这是完全不同的东西(用于生成器)。
在这里做什么是正确的事情?
time.sleep(0)
足以产生控制 – 不需要使用正的epsilon。 事实上, time.sleep(0)
意味着“屈服于任何其他线程可能已经准备好”。
阅读全球译员locking(GIL)。
例如: http : //jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/
另外: http : //www.pyzine.com/Issue001/Section_Articles/article_ThreadingGlobalInterpreter.html
如果您必须执行繁忙等待 (例如轮询设备),请在您的代码中执行此操作。
time.sleep( 0.0001 )
这将产生线程调度程序。
另外,我在http://homepage.mac.com/s_lott/iblog/architecture/C551260341/E20081031204203/index.html收集了一些笔记和参考资料;
如果你在* nix上这样做,你可能会发现select库是有用的。 Kamaela也有一些你可能会觉得有用的组件,但是它可能需要一些范例改变。