Django管理命令+ gevent-异步

时间:2018-07-22 13:02:57

标签: python django gevent

我在django管理命令中有一些代码,但是由于某种原因,它不会进行异步调用,而且我也不十分清楚原因。示例在这里:

def task(obj):
    print('Start: %s' % obj.id)
    do_bg(obj)
    print("Task: %s(%s)" % (obj, obj.id))
    print('End: %s' % obj.id)

    threads = []
    for obj in objs:
        threads.append(gevent.spawn(task, obj))
    gevent.joinall(threads)

do_bg(obj) 是有点复杂的方法,通常运行<8秒,并为obj计算机创建一个ssh集合,收集一些信息,并对其进行处理。

如果我将 do_bg(obj) 替换为 gevent.sleep(random.randint(0,1)) < / strong>,则任务将同时运行,但是使用 do_bg(obj) 行,它们彼此依次运行。

我想知道原因,以及如何使它们并行运行?

Django:1.9.2 gevent:1.3.5 python:3.4.2

谢谢。


我也尝试使用:

import gevent.monkey
gevent.monkey.patch_socket()

开头,但失败,但出现异常:

paramiko.ssh_exception.SSHException: Error reading SSH protocol bannercannot switch to a different thread

。是的,paramiko在后台创建ssh连接。

0 个答案:

没有答案