以下腳本的目的是同時執行多個函數,但我不知道爲什麼它不能正常工作。
這些功能以順序方式執行,而不是並行執行。使用greenlet同時執行多個函數的問題
我會很感激任何建議澄清我,關於我做錯了什麼。
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()
請包括您收到的任何錯誤消息,並更具體地瞭解正在發生的事情。它是否立即返回?它永遠掛起?你有什麼試圖解決它? – TorelTwiddler
沒有錯誤消息,它不會永遠掛起。問題在於這個過程是以一種明確的方式發生的,而不是無序的。每個功能在上一次完成時啓動。我不希望那樣。 – rmaceissoft
我已經看到了什麼是我的錯誤。我使用「time.sleep」而不是「eventlet.sleep」。不同的是,最後一個不會阻塞整個解釋器,因此讓其他greenlet也可以繼續處理它們的請求。感謝我自己這一次; - )....我希望這個虛擬問題可以幫助其他人...... – rmaceissoft