使用绿素值



我想在我的一个测试函数中实现异步工作。 启发式的函数看起来像这样——

def test_sessions(self):
sessions = []
"""
Creating 10k session instances
"""
for i in xrange(10000):
sessions.append(Session.create_session(session_handle, login_params(user, pass))
"""
Foreach session instance, check session validity by running read_dir command
"""
for session in sessions:
connection = Connection.create_connection(addrs, port)
connection.session = session.id
response = connection.read_dir(dir)
"""
Deleting the 10k opened sessions
"""
for session in sessions:
session.delete(session_handle)

对 10k 会话执行此检查所需的时间约为 30m。 因此,我为这些部分(创建、检查和删除(使用 greenlet 和 gevent,以加快速度。

我在理解如何实现这个想法时遇到了一些麻烦,因为我无法弄清楚如何访问将由 greenlet 线程创建的会话实例。我找不到任何关于如何使用绿叶值的好例子。

请在这里指导我使用绿的正确方法

将单个会话的代码放入单个函数中,如下所示:

def check_session()
session = Session.create_session(session_handle, login_params(user, pass)
connection = Connection.create_connection(addrs, port)
connection.session = session.id
response = connection.read_dir(dir)
session.delete(session_handle)

现在你应该导入绿绿,猴子补丁全部,然后使用创建任务 任务 = [ Greenlet.spawn(check_session( for i in range(10000( ] 对于任务中的任务: task.run((

将启动所有任务。请注意,greenlet 不会并行运行 - 它们只阻塞输入/输出,例如网络套接字,然后另一个将开始执行。如果您的大部分时间都花在等待网络上,他们应该会加快速度。如果没有,则不会。

如果您使用一些非常具体或自定义的代码来访问网络,也要小心。monkey.patch_all()将 Python 套接字代码(和磁盘 I/O 等(替换为 gevent 版本,该版本生成另一个绿粒而不是等待。如果您的代码不使用socket,它可能不会被修补,它将像往常一样按顺序工作。

相关内容

  • 没有找到相关文章

最新更新