2016-09-22 3 views
0

Когда я использую gevent, и он все еще синхронный, и время выполнения не уменьшается.Python gevent асинхронный

Вот мой сценарий:

def fun(i): 
    p = subprocess.Popen(['./main', 'data.txt'], stdout=PIPE, stderr=PIPE) 
    err = p.communicate()[1] 
    p.wait() 

def synchronous(): 
    for i in range(1,10): 
     fun(i) 

def asynchronous(): 
    threads = [gevent.spawn(fun, i) for i in xrange(10)] 
    gevent.joinall(threads) 

Сравнивая %timeit synchronous() и %timeit asynchronous(), есть небольшие изменения. И «main» - это скомпилированный файл C++, а «data.txt» - это входной файл для «main».

Я думаю, проблема в том, что я использую подпроцесс для вызова внешней подпрограммы, но я не знаю, как решить эту проблему.

+0

Попробуйте использовать 'pool.map' примерно так. http://stackoverflow.com/questions/5442910/python-multiprocessing-pool-map-for-multiple-arguments – lennard

+0

@lennard Кажется, работа. Большое спасибо. Но в чем разница между этими двумя способами? – insomnia

ответ

Смежные вопросы