【发布时间】:2011-07-12 22:08:22
【问题描述】:
以下脚本的目的是同时执行许多功能,但我不知道为什么它不能正常工作。
函数按顺序执行,而不是并行执行。
如果我有任何建议来澄清我做错了什么,我将不胜感激。
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()
【问题讨论】:
-
请包括您收到的任何错误消息,并更具体地说明正在发生的事情。它会立即返回吗?它会永远挂起吗?您尝试过什么解决方法?
-
没有错误信息,它不会永远挂起。问题是该过程以连续的方式发生,而不是无序的。每个功能在前一个完成时开始。我不希望那样。
-
我已经看到了我的错误。我正在使用“time.sleep”而不是“eventlet.sleep”。不同之处在于最后一个不会阻塞整个解释器,因此也让其他 greenlet 继续处理他们的请求。这次感谢我自己;-)....我希望这个虚拟问题对其他人有所帮助....
标签: python multithreading coroutine