def test_flags_conversion(self): if sys.platform != 'win32': self.assertEqual(core.loop(2, default=False).backend_int, 2) self.assertEqual(core.loop('select', default=False).backend, 'select') self.assertEqual(core._flags_to_int(None), 0) self.assertEqual(core._flags_to_int(['kqueue', 'SELECT']), core.BACKEND_KQUEUE | core.BACKEND_SELECT) self.assertEqual(core._flags_to_list(core.BACKEND_PORT | core.BACKEND_POLL), ['port', 'poll']) self.assertRaises(ValueError, core.loop, ['port', 'blabla']) self.assertRaises(TypeError, core.loop, object())
def test_flags_conversion(self): # pylint: disable=no-member if not greentest.WIN: self.assertEqual(core.loop(2, default=False).backend_int, 2) self.assertEqual(core.loop('select', default=False).backend, 'select') self.assertEqual(core._flags_to_int(None), 0) self.assertEqual(core._flags_to_int(['kqueue', 'SELECT']), core.BACKEND_KQUEUE | core.BACKEND_SELECT) self.assertEqual( core._flags_to_list(core.BACKEND_PORT | core.BACKEND_POLL), ['port', 'poll']) self.assertRaises(ValueError, core.loop, ['port', 'blabla']) self.assertRaises(TypeError, core.loop, object())
def test_flags_conversion(self): if sys.platform != 'win32': self.assertEqual(core.loop(2, default=False).backend_int, 2) self.assertEqual(core.loop('select', default=False).backend, 'select') self.assertEqual(core._flags_to_int(None), 0) self.assertEqual(core._flags_to_int(['kqueue', 'SELECT']), core.BACKEND_KQUEUE | core.BACKEND_SELECT) self.assertEqual(core._flags_to_list(core.BACKEND_PORT | core.BACKEND_POLL), ['port', 'poll']) try: core.loop(['port', 'blabla']) except ValueError as ex: if sys.version_info[0] > 2: ex.__traceback__ = None else: raise AssertionError("ValueError is not raised") try: core.loop(object()) except TypeError as ex: if sys.version_info[0] > 2: ex.__traceback__ = None else: raise AssertionError("TypeError is not raised")
def test_flags_conversion(self): if sys.platform != 'win32': self.assertEqual(core.loop(2, default=False).backend_int, 2) self.assertEqual(core.loop('select', default=False).backend, 'select') self.assertEqual(core._flags_to_int(None), 0) self.assertEqual(core._flags_to_int(['kqueue', 'SELECT']), core.BACKEND_KQUEUE | core.BACKEND_SELECT) self.assertEqual( core._flags_to_list(core.BACKEND_PORT | core.BACKEND_POLL), ['port', 'poll']) try: core.loop(['port', 'blabla']) except ValueError as ex: if sys.version_info[0] > 2: ex.__traceback__ = None else: raise AssertionError("ValueError is not raised") try: core.loop(object()) except TypeError as ex: if sys.version_info[0] > 2: ex.__traceback__ = None else: raise AssertionError("TypeError is not raised")
http://www.cnblogs.com/wunaozai/p/3950249.html class loop: def __init__(self, object flags=None, object default=None, size_t ptr=0): pass flags: 确定后端使用的异步IO模型,如"select, epoll",可直接字符串也可数字(需参考libev/ev.h) default:是否使用libev的默认loop,否则将创建一个新的loop 可通过loop.backend确定是否和你设置一致,loop.backend_int返回libev内部对应序号 如: from gevent import core flag = "select" loop=core.loop(flag) assert loop.backend == flag assert core._flags_to_int(flag) == loop.backend_int libev支持的watcher: 所有watcher都通过start启动,并传递回调函数 1.io: loop.io(int fd, int events, ref=True, priority=None) fd: 文件描述符,可通过sock.fileno()获取 events: 事件 1:read 2:write 3.read_write 下面两个参数所有watcher都适用 ref: 是否增加mainLoop的引用次数,默认是增加的。在libev中watcher.start都会增加引用次数,watcher.stop都会减少引用次数。 当libev发现引用次数为0,也就没有需要监视的watcher,循环就会退出。 priority: 设置优先级 2.timer定时器 loop.timer(double after, double repeat=0.0, ref=True, priority=None)