我在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连接。