以下脚本的目的是同时执行许多功能,但我不知道它为什么不能正常工作。
函数以顺序方式执行,而不是并行执行。
我很感激有任何建议要澄清我,我做错了什么。
import time
import eventlet
EXECUTION_TIMEOUT = 10
def example(name, steps_limit):
print 'Starting process %s with %d steps' % (name, steps_limit)
for i in range(1, steps_limit+1):
print "Process %s, step %d" % (name, i)
time.sleep(2)
print 'Finishing process %s with %d steps' % (name, steps_limit)
def fetch(input_data):
example(input_data['name'], input_data['steps'])
test_data = [{'name':'proceso1', 'steps':3},
{'name':'proceso2', 'steps':5},
{'name':'proceso3', 'steps':6},
]
def main():
#Setting up time out
timeout = eventlet.timeout.Timeout(EXECUTION_TIMEOUT)
#initialize pool
pool = eventlet.GreenPool(size=1000)
try:
for hits in pool.imap(fetch, test_data):
pass
except eventlet.Timeout:
print 'Operation interrupted by timeout concept'
finally:
timeout.cancel()
if __name__ == '__main__':
main()
答案 0 :(得分:2)
关于time.sleep()
是罪魁祸首你是对的。
但您不必将time.sleep()
替换为eventlet.sleep()
。相反,您可以将补丁time.sleep
变为eventlet.sleep
。
事实上,这是首选,因为您不知道使用time.sleep
的库也会被修复,而如果您自己修复它,则只修复您的代码。
因此,在gevent中,我们建议您为所有程序调用{{1}}。在eventlet中,存在类似的功能。